如果花费的时间超过X秒,请重新启动PHP脚本循环

时间:2015-08-28 02:50:36

标签: php

我有一个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);

}

1 个答案:

答案 0 :(得分:0)

我在我们的服务器上运行了一个PHP脚本,它可以作为几个关键任务的工作者。我有另一个脚本被安排作为一个cron工作,“留意”这个。以下是整个事情的样子:

  1. 有两个脚本worker.php,它有一个“while(1)”循环,所以它永远不会死,一个monitor.php计划每15分钟运行一次
  2. 每次循环开始时,worker.php都会将其pid写入文件(这样pid始终更新),使用getmypid()
  3. 当cron作业执行monitor.php时,每隔15分钟,它会从文件中读取pid,并通过ps或file_exists('/ proc /'.$ pid)检查进程是否正在运行 3.1。如果pid有效(进程正在运行),那么它只会退出。 3.2。如果pid无效,则执行worker.php。我还在这里添加了邮件通知。
  4. 到目前为止,我发现cron作业最可靠,所以我选择了这个解决方案。