【发布时间】:2015-08-19 15:15:08
【问题描述】:
我正在配置Monit 来监控Redis 和Redis Sentinel。但是每次运行 Monit 时,它都会记录 Redis 和 Redis Sentinel 都没有运行并尝试运行它们,尽管它们都已经完成了。它无法启动 Redis 进程。
虽然它在系统检查和 nginx 以及其他一些进程中运行良好。
版本:
Redis: Redis server v=2.8.4 sha=00000000:0 malloc=jemalloc-3.4.1 bits=64 build=a44a05d76f06a5d9
Monit: version 5.6
这是我对 Redis 的 Monit 配置(Redis Sentinel 的配置几乎相同):
# redis
check process redis with pidfile /var/run/redis-server.pid
group cache
group redis
start program = "/etc/init.d/redis-server start"
stop program = "/etc/init.d/redis-server stop"
if failed host 127.0.0.1 port 6379 then restart
if totalmem > 500 Mb then alert
if cpu > 60% for 2 cycles then alert
if cpu > 98% for 5 cycles then restart
if 2 restarts within 2 cycles then alert
depend redis_bin
depend redis_rc
check file redis_bin with path /usr/bin/redis-server
group redis
include /etc/monit/templates/rootbin
check file redis_rc with path /etc/init.d/redis-server
group redis
include /etc/monit/templates/rootbin
这里是Monit的日志:
[PKT Aug 19 17:00:07] error : 'redis' process is not running
[PKT Aug 19 17:00:07] info : 'redis' trying to restart
[PKT Aug 19 17:00:07] info : 'redis' start: /etc/init.d/redis-server
[PKT Aug 19 17:00:37] error : 'redis' failed to start
我认为这个问题的原因是其他运行良好的进程以及所有目录和 bin 文件都归 root 所有。但是与 Redis 相关的所有内容都归“redis”组中的用户“redis”所有。这就是为什么 Monit 无法启动或停止 Redis。
但我尝试通过在启动和停止设置中添加用户来使用它:
start program = "/etc/init.d/redis-server start"
as uid redis and gid redis
stop program = "/etc/init.d/redis-server stop"
as uid redis and gid redis
但这也没有用。
我在这里做错了什么?用 Monit 监控 Redis 的正确方法是什么?
【问题讨论】: