如果服务失败几次,Monit 似乎会放弃重新启动服务,并取消监控。我在文档中找不到有关何时或为何的具体信息。
我的 Monit 配置设置如下:
set daemon 10
set logfile /var/log/monit.log
set statefile /var/lib/monit/monit.state
set alert [email protected] not { nonexist, action, instance }
include /etc/monit/conf.d/*
这是我正在使用的 Monit 规则集的一个示例:
check process myservice
with pidfile /var/run/myservice/myservice.pid
start program = "/home/myservice/current/start-myservice.sh"
as uid myservice and gid myservice
stop program = "/home/myservice/current/stop-myservice.sh"
as uid myservice and gid myservice
mode active
在我的环境中,我希望它无限期地尝试轮询间隔。有没有办法配置 monit 来绝不停止监控服务,即使它没有成功启动?
答案1
我会简单地使用一个按所需间隔运行的 cron 作业monit start servicename
。当然,您可以使用组进行更精细的控制。
答案2
我遇到了完全相同的问题,尽管重新启动了 monit,但它会在超时后拒绝监控。最后发现必须删除 monit 状态文件 ( /var/.monit.state
) 并重新启动 monit 才能使其再次监控所有程序。
答案3
经过一番挖掘,我们发现 Monit 将系统监控数据存储在一个“状态”文件中。这个“状态”文件会跟踪哪些服务正在被监控/未被监控。
因此,虽然这有点“蛮力”,但确实有效。如果某个服务由于超时等原因变为“不受监控”,则只需从系统中删除 Monit 状态文件,如下所示:
sudo rm /var/lib/monit/state
然后像这样重新启动 Monit,一切都会好起来:
sudo service monit restart
答案4
根据您的 Monit 代码片段,您似乎必须修改或添加循环语句到您的流程节中。请参阅相关文档在这里和这里。
似乎您可能希望将服务测试设置为在每个周期执行,并且不设置超时语句。另请查看您的 monit 主页http://主机名:2812. Check the page for the relevant service and look at
“存在”字段。您的默认设置应如下所示:
If doesn't exist 1 times within 1 cycle(s) then restart else if succeeded 1 times within 1 cycle(s) then alert