使用shell脚本重启php脚本

时间:2011-01-24 09:09:23

标签: shell process kill ps

我使用shell脚本来监视php脚本的工作。我的目标是这个PHP脚本不应该睡眠/终止,必须始终运行。我使用的代码是 -

ps aux | grep -v grep | grep -q $file || ( nohup php -f $file -print > /var/log/file.log & ) 

现在这个想法不适用于php脚本终止的情况(进程状态代码T)。任何处理这种情况的想法。可以永久杀死这些进程,然后重新启动。

2 个答案:

答案 0 :(得分:2)

如何在php解释器死亡时重新启动它?

while true ; do php -f $file -print >> /var/log/file.log ; done

当然,有人可以发送脚本SIGSTOPSIGTSTPSIGTTINSIGTTOU以使其挂起,但也许这个人有充分的理由。除SIGSTOP之外,您可以阻止它们,所以也许没关系。

或者,如果脚本在永远不会返回的设备或套接字上执行类似于调用read(2)的操作,则无法确保脚本的“活跃度”。 (但是你会使用非阻塞IO来防止这个情况,所以这已经涵盖了。)

哦,是的,你也可以将它填入你的/ etc / inittab。但我不会给你更多关于这一点的暗示,因为我认为这可能是一个坏主意。

并且有许多类似的工具已经存在:daemontoolsLinux 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等运行它。