在本地配置了一台Ubuntu Server 16.04,发现关闭或者重启服务器时总是卡在stop redis_6379 service。之前自用Redis和MongoDB服务都在HostUS,跑着CentOS 6,VPS从未手动关机或重启过,自然也就没有注意到Redis会出问题。既然出现了不和谐现象,就要追根溯源,彻底解决。既然service redis_6379 stop无效,那么只能手动通过redis-cli关闭服务了:1
2root@ubuntu:~# redis-cli -a yourpassword
127.0.0.1:6379> shutdown save
但是这样关闭服务太过麻烦,并且设置了redis开机自启动后,每次关机都要先手动关闭服务,很是繁琐。那么如果将服务默认关闭方法改为调用redis-cli来完成,问题不就解决了吗?于是马上在/etc/init.d中找到了redis_6379,打开一看立马懵圈。原来系统默认调用的就是redis-cli,而且还是未认证方式,redis服务设了密码,当然无法关闭了。将stop方法改为以下内容即可:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -a "yourpassword" -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis_$REDISPORT to shutdown ..."
sleep 1
done
echo "Redis_$REDISPORT stopped"
fi
;;
其实只是在调用$CLIEXEC时,使用-a "yourpassword"认证。OK,大功告成!服务关闭重启再无卡顿。另外将redis加入开机启动更是美滋滋:1
root@ubuntu:~# update-rc.d redis_6379 defaults