经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
Redis服务方式启动脚本
来源:cnblogs  作者:MSSQL123  时间:2020/12/14 17:15:57  对本文有异议


Redis没有默认的服务脚本,方便管理的情况下需要自定义一个服务脚本,对于实例的启动好说,对于关闭Redis进程,有两种方式
1,直接杀进程,kill -9的方式,过于简单粗暴
2,基于redis-cli shutdown的方式,需要数据密码(如果脑子没问题都会启用密码认证)
网上的两个版本,对于启动redis进程来说,是比较简单的,第一种是简单粗暴通过kill进程的方式,第二种是redis-cli shutdown但是是基于无密码的方式的,都不实用,白嫖是不可能白嫖的了。
于是就简单改写了一个基于密码认证的redis-cli shutdown方式,开启了密码认证的情况下,在stop或者restart的时候,输入一个密码参数,并且验证密码的有效性,然后基于redis-cli shutdown关闭/重启实例。

这里是Redis服务的模板,
1,基于当前实例的端口号判断服务状态,而不是pid文件,因为如果通过kill方式杀掉的进程,pid文件仍然会存在于文件中。
2,在stop或者restart的时候,需要对密码参数进行验证
3,在执行redis-cli shutdown的时候,如果密码出错,也需要进行验证,这里基于错误密码验证失败后的NOAUTH Authentication required.关键字进行判断

  1. #!/bin/sh
  2. # chkconfig: 2345 10 90
  3. # description: Start and Stop redis
  4. port=db_port
  5. basedir=base_dir
  6. datadir=data_dir
  7. conf=data_dir/redis.conf
  8. case "$1" in
  9. start)
  10. process=`netstat -ntl|grep $port | wc -l`
  11. if [ $process -eq 0 ]
  12. then
  13. cd ${datadir}
  14. $basedir/bin/redis-server ./redis.conf&
  15. if [ $? -eq 0 ]; then
  16. echo "Starting Redis server sucefully"
  17. else
  18. echo "Starting Redis server fail,refer to the log information for details"
  19. fi
  20. else
  21. echo "Port "$port is exists, process is already running""
  22. fi
  23. ;;
  24. stop)
  25. if [ ! $2 ];then
  26. echo "Redis password is required"
  27. exit -1
  28. fi
  29. process=`lsof -i:$port -t`
  30. if [ $process ]; then
  31. echo "Stopping ..."
  32. #kill -9 $process
  33. #$basedir/bin/redis-cli -p $port -a $2 shutdown
  34. msg=`$basedir/bin/redis-cli -a $2 -p $port shutdown`
  35. result=$(echo $msg | grep "Authentication")
  36. if [[ "$result" = "" ]]; then
  37. while [ -x /proc/${process} ]
  38. do
  39. echo "Waiting for Redis to shutdown ..."
  40. sleep 1
  41. done
  42. echo "Redis stopped"
  43. else
  44. echo "Authentication failed,please check redis password"
  45. exit -1
  46. fi
  47. else
  48. echo "Process is not running"
  49. fi
  50. ;;
  51. restart)
  52. process=`lsof -i:$port -t`
  53. if [ $process ]; then
  54. "$0" stop $2
  55. if [ $? -eq 0 ]; then
  56. "$0" start
  57. fi
  58. else
  59. "$0" start
  60. fi
  61. ;;
  62. *)
  63. echo "Please use start or stop or restart as first argument"
  64. ;;
  65. esac

安装过程中替换相关的变量

  1. #!/bin/bash
  2. #sh redis_install.sh /usr/local/redis_install /usr/local/redis_instance/redis8000/ redis-5.0.4 8000 192.168.0.66
  3. set -e
  4. if [ $# -lt 4 ]; then
  5. echo "$(basename $0): Missing script argument"
  6. echo "$(installdir $0) [installfilename] [port] "
  7. exit 9
  8. fi
  9. PotInUse=`netstat -anp | awk '{print $4}' | grep $4 | wc -l`
  10. if [ $PotInUse -gt 0 ];then
  11. echo "ERROR" $4 "Port is used by another process!"
  12. exit 9
  13. fi
  14. basedir=${1%/}
  15. installdir=${2%/}
  16. installfilename=${3%/}
  17. port=$4
  18. bind_ip=$5
  19. cd $basedir
  20. echo "Unzip installation package "
  21. tar -zxvf $installfilename.tar.gz >/dev/null 2>&1 &
  22. sleep 1s
  23. mkdir -p $installfilename
  24. cd $installfilename
  25. mkdir -p $installdir
  26. echo "Compile installation package"
  27. make PREFIX=$basedir install >/dev/null 2>&1 &
  28. sleep 1s
  29. cp $basedir/redis.conf $installdir
  30. sed -i "s/instance_port/$port/g" $installdir/redis.conf
  31. sed -i "s/bind_ip/$bind_ip/g" $installdir/redis.conf
  32. cd $basedir
  33. cp -f redis_6379 /etc/init.d/redis_$port
  34. sed -i "s/db_port/$port/g" /etc/init.d/redis_$port
  35. sed -i "s/base_dir/${basedir//\//\\/}/g" /etc/init.d/redis_$port
  36. sed -i "s/data_dir/${installdir//\//\\/}/g" /etc/init.d/redis_$port
  37. chmod +x /etc/init.d/redis_$port
  38. sleep 1s
  39. echo "Start redis service"
  40. cd $installdir
  41. $basedir/bin/redis-server redis.conf >/dev/null 2>&1 &
  42. if [ $? -eq 0 ]; then
  43. echo "Starting Redis server sucefully"
  44. else
  45. echo "Starting Redis server fail,refer to the log information for details"
  46. fi

简单基于服务模式启动,关闭,重启redis服务,以及密码正确性验证

 

原文链接:http://www.cnblogs.com/wy123/p/14117432.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号