我使用shell脚本来监视php脚本的工作。我的目标是这个PHP脚本不应该睡眠/终止,必须始终运行。我使用的代码是 -
ps aux | grep -v grep | grep -q $file || ( nohup php -f $file -print > /var/log/file.log & )
现在这个想法不适用于php脚本终止的情况(进程状态代码T)。任何处理这种情况的想法。可以永久杀死这些进程,然后重新启动。
答案 0 :(得分:2)
如何在php解释器死亡时重新启动它?
while true ; do php -f $file -print >> /var/log/file.log ; done
当然,有人可以发送脚本SIGSTOP
,SIGTSTP
,SIGTTIN
,SIGTTOU
以使其挂起,但也许这个人有充分的理由。除SIGSTOP
之外,您可以阻止它们,所以也许没关系。
或者,如果脚本在永远不会返回的设备或套接字上执行类似于调用read(2)
的操作,则无法确保脚本的“活跃度”。 (但是你会使用非阻塞IO来防止这个情况,所以这已经涵盖了。)
哦,是的,你也可以将它填入你的/ etc / inittab。但我不会给你更多关于这一点的暗示,因为我认为这可能是一个坏主意。
并且有许多类似的工具已经存在:daemontools和Linux Heartbeat是最先想到的两个。
答案 1 :(得分:1)
如果脚本在终结之后退出,或者它崩溃了,并且需要重新启动,那么一个简单的shell脚本就可以解决这个问题。
#!/bin/bash
# runScript.sh - keep a php script running
php -q -f ./cli-script.php -- $@
exec $0 $@;
exec $0
重新运行shell脚本,并给出参数。
要在后台运行,您可以nohup runScript.sh
或通过init.d脚本,upstart,runit或supervisord等运行它。