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.关键字进行判断
#!/bin/sh# chkconfig: 2345 10 90 # description: Start and Stop redisport=db_portbasedir=base_dirdatadir=data_dirconf=data_dir/redis.confcase "$1" in start) process=`netstat -ntl|grep $port | wc -l` if [ $process -eq 0 ] then cd ${datadir} $basedir/bin/redis-server ./redis.conf& if [ $? -eq 0 ]; then echo "Starting Redis server sucefully" else echo "Starting Redis server fail,refer to the log information for details" fi else echo "Port "$port is exists, process is already running"" fi ;; stop) if [ ! $2 ];then echo "Redis password is required" exit -1 fi process=`lsof -i:$port -t` if [ $process ]; then echo "Stopping ..." #kill -9 $process #$basedir/bin/redis-cli -p $port -a $2 shutdown msg=`$basedir/bin/redis-cli -a $2 -p $port shutdown` result=$(echo $msg | grep "Authentication") if [[ "$result" = "" ]]; then while [ -x /proc/${process} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" else echo "Authentication failed,please check redis password" exit -1 fi else echo "Process is not running" fi ;; restart) process=`lsof -i:$port -t` if [ $process ]; then "$0" stop $2 if [ $? -eq 0 ]; then "$0" start fi else "$0" start fi ;; *) echo "Please use start or stop or restart as first argument" ;;esac
安装过程中替换相关的变量
#!/bin/bash#sh redis_install.sh /usr/local/redis_install /usr/local/redis_instance/redis8000/ redis-5.0.4 8000 192.168.0.66set -eif [ $# -lt 4 ]; then echo "$(basename $0): Missing script argument" echo "$(installdir $0) [installfilename] [port] " exit 9fiPotInUse=`netstat -anp | awk '{print $4}' | grep $4 | wc -l`if [ $PotInUse -gt 0 ];then echo "ERROR" $4 "Port is used by another process!" exit 9fibasedir=${1%/}installdir=${2%/}installfilename=${3%/}port=$4bind_ip=$5cd $basedirecho "Unzip installation package "tar -zxvf $installfilename.tar.gz >/dev/null 2>&1 &sleep 1smkdir -p $installfilenamecd $installfilenamemkdir -p $installdirecho "Compile installation package"make PREFIX=$basedir install >/dev/null 2>&1 &sleep 1s cp $basedir/redis.conf $installdirsed -i "s/instance_port/$port/g" $installdir/redis.confsed -i "s/bind_ip/$bind_ip/g" $installdir/redis.confcd $basedircp -f redis_6379 /etc/init.d/redis_$portsed -i "s/db_port/$port/g" /etc/init.d/redis_$portsed -i "s/base_dir/${basedir//\//\\/}/g" /etc/init.d/redis_$portsed -i "s/data_dir/${installdir//\//\\/}/g" /etc/init.d/redis_$portchmod +x /etc/init.d/redis_$portsleep 1secho "Start redis service"cd $installdir$basedir/bin/redis-server redis.conf >/dev/null 2>&1 &if [ $? -eq 0 ]; then echo "Starting Redis server sucefully"else echo "Starting Redis server fail,refer to the log information for details"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