如何检查php脚本是否仍在运行

时间:2020-03-06 14:33:42  来源:igfitidea点击:

我有一个监听队列的PHP脚本。从理论上讲,它永远不会消失。是否需要检查其是否仍在运行?像PHP的" Ruby's God(http://god.rubyforge.org/)"之类的东西?

上帝与语言无关,但是拥有在Windows上也可以使用的解决方案会很好。

解决方案

简单的bash脚本

#!/bin/bash
while [true]; do
    if ! pidof -x script.php;
    then
        php script.php &
    fi
done

一种可能的解决方案是让它使用套接字函数在端口上侦听。我们可以使用简单的脚本检查套接字是否仍在侦听。甚至像pingdom这样的监视服务都可以监视其状态。如果死亡,则套接字不再监听。

大量的解决方案..祝你好运。

不是用于Windows,而是...

我有几个长时间运行的PHP脚本,其中包含一个外壳脚本。我们可以选择从脚本中返回一个值,该值将在shell脚本中进行检查以退出,立即重新启动或者休眠几秒钟-然后重新启动。

这是一个简单的示例,它将一直运行PHP脚本,直到将其手动停止为止。

#!/bin/bash
clear
date
php -f cli-SCRIPT.php
echo "wait a little while ..."; sleep 10
exec 
php daemon.php 2>&1 | mail -s "Daemon stopped" [email protected]

" exec $ 0"将重新启动脚本,而无需创建子进程,该子进程以后将不得不解散(同时占用资源)。这个bash脚本包装了一个邮件发件人,因此如果退出并暂停一会儿就没问题了。

只需在脚本后添加第二个命令即可。当/如果停止,则调用第二个命令。例如。:

Just append a second command after the script. When/if it stops, the second command is invoked. Eg.:

php daemon.php | mail -s "Daemon stopped" [email protected]

编辑:

从技术上讲,这会立即调用邮件程序,但仅在php脚本结束时才完成命令。这样做将捕获php-script的输出并将其包含在邮件正文中,这对于调试导致脚本停止的原因很有用。

如果我们熟悉脚本,则可以要求他每隔X次在db中设置一个时间值,然后让cron作业检查该值是否最新。

troelskn写道:

php daemon.php & mail -s "Daemon stopped" [email protected]

每次在daemon.php中打印一行时,都会调用mail(应该永远不会,但是仍然应该)。

而是使用双&运算符分隔命令,即

##代码##