我正在寻找一种方法来监视一个进程,并重新启动可执行文件,如果进程死于任何原因。 Linux有一个内置的工具可以做到这一点?
如果它是从init启动的,你可以通过init重新生成它。 将进程的操作设置为“重新生成”您想要进程的运行级别。
我以前回答过类似的问题 。
在你的情况下:
#!/bin/bash while ! <<command>> do sleep 1 echo "Restarting program..." done
用你想要执行的命令replace<<command>> 。 该过程必须完成退出码为零,以打破循环。 否则,由脚本重新启动。
如果它死了,你只想重启它吗? 这个问题是它不能处理冻结的情况。 所以只是检查过程并不总是有帮助。 所以,如果这是一个Web服务器,你想有一个脚本从用户的angular度来检查它。
如果您设置了Nagios监控,则可以使用事件处理程序 。 这些只是您编写的脚本,在服务closures时运行,所以如果网站closures,您可以重新启动某些类似Apache的脚本。
取决于发行版,但是我们已经成功地使用“monit”来完成这个任务。 这很容易。 您可以编写自己的检查,监视进程PID等。
示例monitrc文件:
check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/ssh start" stop program "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
为什么不是一个简单的bash脚本?
#!/usr/bin/bash while `true` do xeyes done
用您select的程序replacexeyes。
简答 :不,你必须自己做。
长的答案 :您将需要一个父进程来启动它,然后继续检查它是否有效,并在需要时重新启动它。
你可以使用daemontools来pipe理它。