使用shell脚本重新启动php脚本

使用shell脚本重新启动php脚本,shell,process,kill,ps,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),这种想法将不适用于这种情况。有没有处理那个案子的办法。这样的进程是否可以永久终止,然后重新启动。当php解释器终止时重新启动它怎么样 while

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

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

现在,如果php脚本被终止(进程状态代码T),这种想法将不适用于这种情况。有没有处理那个案子的办法。这样的进程是否可以永久终止,然后重新启动。

当php解释器终止时重新启动它怎么样

while true ; do php -f $file -print >> /var/log/file.log ; done
当然,有人可以发送脚本a
SIGSTOP
SIGTSTP
SIGTTIN
sigttoo
,使其挂起,但这个人可能有很好的理由。除了
SIGSTOP
,您可以将它们全部屏蔽,所以这可能没问题

或者,如果脚本在一个永远不会返回的设备或套接字上执行类似call
read(2)
的操作,这并不能真正确保脚本的“活性”。(但随后您将使用非阻塞IO来防止这种情况,所以这已经包括在内了。)

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


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

如果脚本在终止后退出,或者它崩溃了,需要重新启动,那么一个简单的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等运行它。

您的PHP脚本在做什么,它必须始终运行?使用不同的语言不是更简单吗?@amphetamachine,我完全赞成人们远离PHP,但在几乎任何目标语言中,问题都是一样的请看。如果您要发送IPC信号,请不要忘记。我已经通过cron作业运行了这个脚本。我的疑问是如何处理进程获得T状态代码的情况。正如安非他明提到的那样,您可以阻止或忽略
SIGTSTP
SIGTTIN
SIGTTOU
。您不能阻止或忽略
SIGSTOP
,但如果有人发送进程
SIGSTOP
,必须有充分的理由。您还可以大大减少有人跟踪您的脚本从而导致其休眠的可能性: