繁体   English   中英

如何在后台永远运行 PHP 脚本文件

[英]How run PHP script file in the background forever

我的问题似乎以前被问过,但等一下,这个有点不同。

我有 2 个 php 文件,我运行以下命令:

nohup php file_1.php >/dev/null 2>&1 &
nohup php file_2.php >/dev/null 2>&1 &

这将基本上创建 2 个 php 进程。

我的问题是有时其中一个文件甚至两个文件都因未知原因被服务器杀死,我必须重新输入命令。 我尝试了“永远”,但没有帮助。

如果服务器重新启动,我将不得不输入这两个命令,我想到了 Cronjob,但我不确定它是否会启动它两次,这会造成更多混乱。

我的问题是如果其中一个或两个被杀死,如何自动启动文件? 实现此目的的最佳方法是准确检查 file_1.php 或 file_2.php 是否确实在运行?

有几种方法可以做到这一点。 正如@Chris Haas 在评论中提到的那样, supervisord可以为您执行此操作,或者您可以定期从 cron 运行看门狗 shell 脚本,检查您的脚本是否正在运行,如果没有,请启动它。 这是我使用的一个。

#!/bin/bash
FIND_PROC=`ps -ef |grep "php queue_agent.php --env prod" | awk '{if ($8 !~ /grep/) print $2}'`
# if FIND_PROC is empty, the process has died; restart it

if [ -z "${FIND_PROC}" ]; then
      DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
      echo queue_agent.php failed at `date`
      cd  ${DIR}
      nohup nice -n 10 php queue_agent.php --env prod -v > ../../sandbox/logs/queue_agent.log &
fi

exit 0

我想你可以试着弄清楚为什么这两个 php 脚本作为第一步关闭。 为了解决这个问题,你可以使用这个 php function:

void register_shutdown_function(callback $callback[.mixed $parameter]);

在脚本执行完成或调用 exit() 后注册要执行的回调。 因此,当 php 文件像这样关闭时,您可以记录一些信息:

function myLogFunction() {
    //log some info here
}
register_shutdown_function(myLogFunction);

除了将标准 output 和错误 output 放入 /dev/null 之外,您还可以将它们放入日志文件中(因为也许我们可以从输出中获得一些有用的信息)。 所以不要使用:

nohup php file_1.php >/dev/null 2>&1 &
nohup php file_2.php >/dev/null 2>&1 &

尝试:

nohup php file_1.php 2>yourLog.log &
nohup php file_2.php 2>yourLog.log &

如果您想在启动服务器时自动运行这两个 php 文件,请尝试编辑 /etc/rc.local(操作系统启动时自动运行)。 在此文件中添加您的 php cli 命令行。

如果您无法弄清楚为什么 php 线程会被关闭,请尝试使用 @Chris Haas 提到的主管。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM