我需要监视在我的web服务器上运行的几个进程。 由于某种原因,清漆现在每天都会崩溃一两次。 我正在使用monit来自动重新启动清漆,但它不起作用。 这是我的用于Varnish的monit.conf条目。
check process varnish with pidfile /var/run/varnish.pid start program = "/etc/init.d/varnish start" with timeout 60 seconds stop program = "/etc/init.d/varnish stop" if failed host <my server ip> port 80 protocol http and request "/blank.html" then restart if 3 restarts within 5 cycles then timeout group server
日志文件显示清漆停止运行后,尝试重新启动后都失败。 然后最后监视清漆。
任何人都有如何解决这个问题的build议? 或者更好的是,你可以build议其他简单的方法来自动监视和重新启动崩溃的进程? 谢谢!
我会寻找daemontools( http://cr.yp.to/daemontools.html )。
监督是为了这个目的而build立的 – 启动stream程并观察它们,如果它们终止,立即重新启动它们。
如果你需要做一些比简单的“它还在运行”检查更复杂的事情,你仍然可以使用监视,如果过程需要重新启动,那么通过监督来做到这一点。
您也可以使用/ etc / inittab使用respawn操作来重新启动死进程。
请参阅http://aplawrence.com/Unixart/startup.html上的 inittab部分
如果您有适当的地方来重新启动服务,您可以使用Nagios的事件处理程序脚本 。
如果清漆需要root权限才能启动(init.d脚本通常会这样做),请将“/etc/init.d/varnish start”更改为“sudo /etc/init.d/varnish start”。 但是这可能还不够,因为你可能不想给所有命令提供sudo nopasswd权限,并且sudo给shell脚本基本上也是一样的。 所以你需要找出那个init脚本中的哪些命令需要sudo,在/ etc / sudoers文件中给这些命令sudo权限给monit用户,最后编辑init脚本。 或者,也许而不是所有这些清漆可以作为非root用户运行?
最后,我相信你知道这一点,但我反正会说。 您明确地付出了很多的努力,希望您花费大量的精力来弄清楚为什么清漆会崩溃并实际修复它(或者让开发人员去弄明白为什么):-)
更新:
这可能不是那么干净,但是以root身份完成这个操作的简单方法可能是设置一个脚本来检查进程是否正常,如果不启动, 然后每隔几分钟运行一次脚本,作为一个cron工作。
从StackOverflow采取另一个伟大的方法:
until myserver; do echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2 sleep 1 done
这可以添加到crontab中:
crontab -e
然后添加一条规则来启动你的监视脚本:
@reboot /usr/local/bin/myservermonitor
或者作为脚本添加到/etc/init.d
有关为什么这是一个好方法的详细解释,请参阅StackOverflow答案 。