我有这样的监控配置:
check process unicorn
with pidfile /tmp/pids/unicorn.0.pid
start program = "/etc/init.d/unicorn start"
stop program = "/etc/init.d/unicorn stop"
restart program = "/etc/init.d/unicorn reload"
if mem is greater than 250.0 MB for 2 cycles then restart
if cpu is greater than 22% for 3 cycles then alert
if cpu is greater than 25% for 2 cycles then restart
但是,看起来每当 monit 尝试重新加载应用程序时(例如由于内存超过 250MB),它都会发出停止然后启动,而不是使用重启程序。有没有办法告诉 monit 改为运行重启?因为发出停止和启动会导致网站暂时瘫痪。
答案1
我遇到了与您报告的相同问题。我不知道为什么不使用“重启程序”来重启。但是,我使用的解决方法是:
check process unicorn
with pidfile /tmp/pids/unicorn.0.pid
start program = "/etc/init.d/unicorn start"
stop program = "/etc/init.d/unicorn stop"
if mem is greater than 250.0 MB for 2 cycles then restart
if cpu is greater than 22% for 3 cycles then alert
if cpu is greater than 25% for 2 cycles then exec "/etc/init.d/unicorn reload"
请注意,我保留了“if mem”检查,以便它会执行停止/启动。这是因为我推测如果有内存泄漏,重新加载可能无济于事,因此可能需要停止/启动。但请根据需要进行调整。
除了深入研究 monit 源代码并修复它(或安装较新的版本并查明它是否已修复)之外,这可能是您的最佳选择。
答案2
您正在使用哪个版本的 monit?
你的重启语法看起来合法
您是否检查过 Web 界面以确保配置已被解析为有人参与?
文档指出
RESTART 重新启动服务并发送警报。重新启动是通过调用服务注册的 restart 方法执行的,如果未设置 restart,则先调用 stop 方法,然后调用 start 方法。
Monit 用于重启的方法是首先执行停止程序,然后等待(最多 30 秒)进程停止,然后执行启动程序并等待(30 秒)启动它。