题 Redis不会关机


大多数时候,当我重新启动我的Ubunutu服务器时,我会一遍又一遍地“等待Redis关闭......”并且在我强行重启之前它永远不会停止。什么可能导致这个?

我有 http://godrb.com/ 监视resque保持运行,因此它可能与此相关。


6
2018-02-10 23:08




redis实际上是作为pidfile中的PID运行的吗? Ubuntu将尝试通过使用类似的东西杀死它来关闭它 kill $(cat /var/run/redis.pid) 或类似的规定。如果pid文件不正确,它将在杀死redis时失败。 - cjc
实际上,如果你正在使用上帝,你可能应该,呃,先杀死上帝。 - cjc
好,谢谢。所以我需要在每次重启前手动杀死上帝? - 99miles
试试这个:确保在重新启动之前停止上帝,并查看问题是否发生。 - cjc
pid文件(有2个resque进程正在运行)是正确的。我可以按你建议的方式杀死进程。现在,我可以做什么,不必在每次重启前手动停止它们? - 99miles


答案:


你有没有Redis监听除了以外的界面 localhost 要么 127.0.0.1?如果是这样,则不会将stop命令发送到正确的接口,如下所示 官方Redis init模板无法包含主机地址

在里面 /etc/init.d/redis 我曾经使用过的文件,我必须定义 REDISHOST=10.150.0.18 然后在第30行(寻找“关闭”)添加该主机参数:

$CLIEXEC -h $REDISHOST -p $REDISPORT shutdown

8
2017-08-07 05:27





如果你像我一样,你需要在redis.conf中输入密码(requirepass)。如果没有密码,redis-cli命令将不会响应。

在/etc/init.d/redis文件的前几行中查找CLIEXEC并更改默认值

CLIEXEC=/usr/local/bin/redis-cli

CLIEXEC="/usr/local/bin/redis-cli -a <password>"

请注意报价。

当我这样做时,我不必包含-h $ REDISHOST参数。

请参阅此处了解该想法的来源: https://groups.google.com/forum/#!topic/redis-db/ITtbA1S-GGg


3
2017-09-09 23:37



这解决了我的问题;但是,如果您复制/粘贴此替换整行,请注意 CLIEEXEC 拼写错误。我没有自己编辑的声誉分数。 - realMarkusSchmidt


谈话中 这个清单 可以解决你的问题:

修改init脚本以在redis-cli调用中使用'-a'(auth)。

CLIEXEC =“/ usr / local / bin / redis-cli -a password”

换句话说,问题是您必须输入Redis密码才能停止服务。修改 /etc/init.d/redis_port 脚本(或您可能拥有的任何其他init脚本) -a password 会解决它。


2
2017-11-05 17:29





你可以杀死redis进程:

$ ps -ef|grep "redis"

# kill $(cat /var/run/redis.pid)

0
2017-08-07 08:51