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 redis
port=db_port
basedir=base_dir
datadir=data_dir
conf=data_dir/redis.conf
case "$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.66
set -e
if [ $# -lt 4 ]; then
echo "$(basename $0): Missing script argument"
echo "$(installdir $0) [installfilename] [port] "
exit 9
fi
PotInUse=netstat -anp | awk '{print $4}' | grep $4 | wc -l
if [ $PotInUse -gt 0 ];then
echo "ERROR" $4 "Port is used by another process!"
exit 9
fi
basedir=${1%/}
installdir=${2%/}
installfilename=${3%/}
port=$4
bind_ip=$5
cd $basedir
echo "Unzip installation package "
tar -zxvf $installfilename.tar.gz >/dev/null 2>&1 &
sleep 1s
mkdir -p $installfilename
cd $installfilename
mkdir -p $installdir
echo "Compile installation package"
make PREFIX=$basedir install >/dev/null 2>&1 &
sleep 1s
cp $basedir/redis.conf $installdir
sed -i "s/instance_port/$port/g" $installdir/redis.conf
sed -i "s/bind_ip/$bind_ip/g" $installdir/redis.conf
cd $basedir
cp -f redis_6379 /etc/init.d/redis_$port
sed -i "s/db_port/$port/g" /etc/init.d/redis_$port
sed -i "s/base_dir/${basedir//\//\\/}/g" /etc/init.d/redis_$port
sed -i "s/data_dir/${installdir//\//\\/}/g" /etc/init.d/redis_$port
chmod +x /etc/init.d/redis_$port
sleep 1s
echo "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服务,以及密码正确性验证
Original: https://www.cnblogs.com/wy123/p/14117432.html
Author: MSSQL123
Title: Redis服务方式启动脚本
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621408/
转载文章受原作者版权保护。转载请注明原作者出处!