标签:redis
一、故障表现2、无法关闭服务
service redis-server restart
service redis-server stop
两个命令都是一直卡在stop那一步,一直无法关闭
kill ps aux|grep ‘redis-server ‘|grep -v grep|awk ‘{print $2}‘
#无法杀掉
kill -9 ps aux|grep ‘redis-server ‘|grep -v grep|awk ‘{print $2}‘
#强行杀掉
强行杀掉后无法启动,原来还有个pid的文件没有删除
/run/redis/redis-server.pid
rm /run/redis/redis-server.pid #手动删除它之后才能启动Redis
补充:
下面是无法关闭redis-server的原因
8576:signal-handler (1527833505) Received SIGTERM scheduling shutdown...
8576:M 01 Jun 14:11:45.180 # User requested shutdown...
8576:M 01 Jun 14:11:45.180 * Saving the final RDB snapshot before exiting.
8576:M 01 Jun 14:11:45.180 # Failed opening .rdb for saving: Permission denied
8576:M 01 Jun 14:11:45.180 # Error trying to save the DB, can‘t exit.
8576:M 01 Jun 14:11:45.180 # SIGTERM received but errors trying to shut down the server, check the logs for more information
二、搜索解决方法
1、关闭”当持久化出错时停止写入硬盘“
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
2、修改目录及持久化权限为755
本来该目录就是755,所以与此无关。
看了几篇基本上和这两个相关。
三、老老实实看日志解决办法
1、在调试过程中一直监控日志
tail -f /var/log/redis/redis-server.log #文件目录及文件名请按自己配置文件,有两行有用的信息
27915:C 01 Jun 14:12:14.038 # Failed opening .rdb for saving: Permission denied
8576:M 01 Jun 14:12:14.138 # Background saving error
2、将dump.rdb所在目录权限修改为777,并将原来的dump.rdb删除,杀掉redis-server并删除redis-server.pid后启动redis-server,奇迹出现了。
ll
-rw-rw---- 1 redis redis 41 Jun 1 14:42 dump.rdb
看到亮点了吧,用户和用户组都是redis,为啥?
3、再来看服务启动的脚本
vi /etc/init.d/redis-server
其中有一段
Run_parts () {
if [ -d /etc/redis/${NAME}.${1}.d ]
then
su redis -s /bin/sh -c "run-parts --exit-on-error /etc/redis/${NAME}.${1}.d"
fi
}
su redis 就在这。
四、最终解决
chown redis:redis -R dir #dir 为redis配置文件中dir的目录
chmod 755 dir #dir 为redis配置文件中dir的目录,最后要将前面改为777的权限恢复回来。
五、总结
在这个事件中本来是很简单的问题,但在此过程中花费了挺长时间,前前后后花了半天。究其原因有二,一是心急,没有好好看日志;二是意外,没有想到会使用redis这个用户来启动,因为启动的时候是在root权限下。
标签:redis
原文地址:http://blog.51cto.com/ruilan/2123110