如果运行时间超过X秒,则重启PHP脚本循环


Restart PHP script loop if it takes longer than X seconds

我有一个php脚本,执行一些动作在不到10分钟(当它不冻结)。

问题是,有时,出于我不知道的原因(可能是连接到远程服务器的问题),它冻结没有任何错误(光标闪烁,如果它仍在执行),它需要手动关闭并重新启动才能再次工作。很多时候,我只发现它卡在几个小时的延迟,这是不好的。

我已经尝试了max_execution_time,但它返回致命错误,不允许我重新启动它,这不是我的想法。

下面是示例代码:
<?php
ini_set('max_execution_time', 1200); 

while (1) {
    include_once 'once.php';
    sleep(5);
    include 'a.php';
    sleep(5);
    include 'b.php';
    sleep(600);
}

我有一个PHP脚本在我们的服务器上运行,这是一种工人的一对关键的工作。我有另一个脚本被安排为cron作业,它"密切关注"这个任务。下面是整个代码的样子:

  1. 有两个脚本worker.php有一个"while(1)"循环,所以它永远不会死,还有一个monitor.php计划每15分钟运行一次
  2. worker.php在每次循环开始时使用getmypid()
  3. 将它的pid写入一个文件(这样pid总是被更新)
  4. 每隔15分钟,当monitor.php被一个cron作业执行时,它从文件中读取pid,并检查进程是否由ps或file_exists('/proc/'.$pid)运行。3.1. 如果pid有效(进程正在运行),它什么也不做,只是退出。3.2. 如果pid无效,则执行worker.php。我还在这里添加了邮件通知。

到目前为止,我发现cron作业是最可靠的,所以我采用了这个解决方案。