1

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

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

现在,如果 php 脚本被终止(进程状态代码 T),这个想法将不适用。任何想法来处理这种情况。是否可以永久终止此类进程然后重新启动。

4

2 回答 2

2

当它死时重新启动php解释器怎么样?

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

当然,有人可以发送脚本 a SIGSTOP, SIGTSTP, SIGTTIN,SIGTTOU使其挂起,但也许那个人有一个很好的理由。您可以阻止所有这些,除了SIGSTOP,所以也许没关系。

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

哦,是的,你也可以把它塞进你的 /etc/inittab。但我并没有给你更多关于这个的提示,因为我认为这可能是一个坏主意。

并且已经存在许多类似的工具:daemontoolsLinux Heartbeat是最先想到的两个。

于 2011-01-24T09:19:04.210 回答
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 等运行它。

于 2011-08-06T11:12:31.220 回答