Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php shell脚本以检查另一个脚本的状态并重新启动它_Php_Shell - Fatal编程技术网

Php shell脚本以检查另一个脚本的状态并重新启动它

Php shell脚本以检查另一个脚本的状态并重新启动它,php,shell,Php,Shell,我希望有一个无限运行的shell scit,不断检查php脚本(比如my.php)的状态,并在脚本以某种方式终止时重新启动它。我有这个想法- ps -aux | grep "my.php" 然后使用此结果检查状态并执行相应操作。提前谢谢。你可以简单地说: ps -aux | grep -q "my.php" || php -f my.php 它的工作方式是grep-q不会输出任何东西,但是如果发现了什么,它会返回一个OK退出代码。当它返回NOT OK退出代码时,| |或之后的部分由于布尔短路

我希望有一个无限运行的shell scit,不断检查php脚本(比如my.php)的状态,并在脚本以某种方式终止时重新启动它。我有这个想法-

ps -aux | grep "my.php"
然后使用此结果检查状态并执行相应操作。提前谢谢。

你可以简单地说:

ps -aux | grep -q "my.php" || php -f my.php
它的工作方式是grep-q不会输出任何东西,但是如果发现了什么,它会返回一个OK退出代码。当它返回NOT OK退出代码时,| |或之后的部分由于布尔短路求值而被执行-查找它

您还需要确保:

您可以在后台运行新脚本,并将其与控制台分离,以便脚本可以保持监视

当你运行ps | grep时,有时候ps也会列出你的grep,然后是grep greps本身,所以你必须过滤掉它

它应该是这样的:

while true
    ps -aux | grep -v grep | grep -q "my.php" || ( nohup php -f "my.php" & )
    sleep 1
done
或者一些类似的..

你可以简单地说:

ps -aux | grep -q "my.php" || php -f my.php
它的工作方式是grep-q不会输出任何东西,但是如果发现了什么,它会返回一个OK退出代码。当它返回NOT OK退出代码时,| |或之后的部分由于布尔短路求值而被执行-查找它

您还需要确保:

您可以在后台运行新脚本,并将其与控制台分离,以便脚本可以保持监视

当你运行ps | grep时,有时候ps也会列出你的grep,然后是grep greps本身,所以你必须过滤掉它

它应该是这样的:

while true
    ps -aux | grep -v grep | grep -q "my.php" || ( nohup php -f "my.php" & )
    sleep 1
done

另一种方法是,在循环中启动php程序:

for ((;;))
do
   my.php 
done
使用Linux ps,您可以使用

ps -C "my.php"

而不是grep,来标识my.php。Grep命令经常发现它们自己。也许你的ps也有类似的开关

另一种方法是,在循环中启动php程序:

for ((;;))
do
   my.php 
done
使用Linux ps,您可以使用

ps -C "my.php"

而不是grep,来标识my.php。Grep命令经常发现它们自己。也许你的ps也有类似的开关

如果你真的觉得有必要对ps的输出进行grep,那就要当心grep本身

[ghoti@pc ~]$ sleep 60 &
[1] 66677
[ghoti@pc ~]$ ps aux | grep sleep
ghoti      66677   0.0  0.0   3928    784  11  S     4:11PM     0:00.00 sleep 60
ghoti      66681   0.0  0.0  16440   1348  11  S+    4:12PM     0:00.00 grep sleep
[ghoti@pc ~]$
有一种简单的方法可以避免这种情况。只需将grep的一部分转换为更复杂的正则表达式

[ghoti@pc ~]$ sleep 60 &
[2] 66717
[ghoti@pc ~]$ ps aux | grep '[s]leep'
ghoti      66677   0.0  0.0   3928    784  11  S     4:11PM     0:00.00 sleep 60
ghoti      66717   0.0  0.0   3928    784  11  S     4:13PM     0:00.00 sleep 60
[ghoti@pc ~]$ 
另一方面,如果您只是想确保您的PHP脚本始终运行,那么可以将它包装成某种东西,在它死后重新运行:

while true; do
  php /path/to/my.php
done
如果希望在启动时运行此功能,可以在服务器上编辑crontab,并使用@reboot标记,假设您在Linux和BSD上使用Vixie cron common:

@reboot /path/to/wrapperscript

有关如何使用cron和@reboot标签的更多详细信息,请访问mancrontab和man5crontab。

如果您确实觉得需要对ps的输出进行grep,请小心grep本身

[ghoti@pc ~]$ sleep 60 &
[1] 66677
[ghoti@pc ~]$ ps aux | grep sleep
ghoti      66677   0.0  0.0   3928    784  11  S     4:11PM     0:00.00 sleep 60
ghoti      66681   0.0  0.0  16440   1348  11  S+    4:12PM     0:00.00 grep sleep
[ghoti@pc ~]$
有一种简单的方法可以避免这种情况。只需将grep的一部分转换为更复杂的正则表达式

[ghoti@pc ~]$ sleep 60 &
[2] 66717
[ghoti@pc ~]$ ps aux | grep '[s]leep'
ghoti      66677   0.0  0.0   3928    784  11  S     4:11PM     0:00.00 sleep 60
ghoti      66717   0.0  0.0   3928    784  11  S     4:13PM     0:00.00 sleep 60
[ghoti@pc ~]$ 
另一方面,如果您只是想确保您的PHP脚本始终运行,那么可以将它包装成某种东西,在它死后重新运行:

while true; do
  php /path/to/my.php
done
如果希望在启动时运行此功能,可以在服务器上编辑crontab,并使用@reboot标记,假设您在Linux和BSD上使用Vixie cron common:

@reboot /path/to/wrapperscript

有关如何使用cron和@reboot标记的更多详细信息,请访问mancrontab和man5crontab。

T表示有人向它发送了一个-STOP信号-这通常是故意的:脚本在后台挂起,或者正在调试。发生这种情况时,您不希望启动第二个进程,因为脚本可能会在一瞬间继续。这并不意味着有人向它发送了一个停止信号——这通常是故意的:脚本挂起在后台,或者正在调试。发生这种情况时,您不想再启动第二个进程,因为脚本可能会在一瞬间继续。如果您的系统有pgrep,那么使用起来就容易多了。如果您的系统有pgrep,那么使用起来就容易多了。我不知道您使用的是什么操作系统,但在我的系统中,-C是通过使用忽略驻留时间的原始CPU计算来更改CPU百分比的计算方式。如果OP的问题是关于PHP和Shell的,那么从PHP和Shell的角度回答这个问题,而不是你对其他命令的特殊偏好。我使用的是Linux,ps的主页上说这个ps符合:1单一Unix规范的第2版,2开放组技术标准基本规范,第6期,3 IEEE Std 1003.1,2004版,4X/开放系统接口扩展[UP XSI],5ISO/IEC 9945:2003-我想这就足够了。从这个问题中我们所知道的是OP的操作系统使用Berkeley风格的ps选项,而不是SystemV选项。你是对的。我不再强调Linux风格的ps部分,而是更多地关注bash部分。谢谢。我不知道你使用的是什么操作系统,但在我的操作系统中,-C是通过使用忽略驻留时间的原始CPU计算来改变CPU百分比的计算方式。如果OP的q
uestion是关于PHP和Shell的,从PHP和Shell的角度回答这个问题,而不是你对其他命令的特殊爱好。我使用的是Linux,ps的主页上说这个ps符合:1单一Unix规范的第2版,2开放组技术标准基本规范,第6期,3 IEEE Std 1003.1,2004版,4 X/开放系统接口扩展[UP XSI],5 ISO/IEC 9945:2003-我认为这就足够了。从这个问题中我们所知道的是OP的操作系统使用Berkeley风格的ps选项,而不是SystemV选项。你说得对。我不再强调Linux风格的ps部分,而是更多地关注bash部分。谢谢