我有一个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作业,它"密切关注"这个任务。下面是整个代码的样子:
- 有两个脚本worker.php有一个"while(1)"循环,所以它永远不会死,还有一个monitor.php计划每15分钟运行一次
- worker.php在每次循环开始时使用getmypid() 将它的pid写入一个文件(这样pid总是被更新)
- 每隔15分钟,当monitor.php被一个cron作业执行时,它从文件中读取pid,并检查进程是否由
ps
或file_exists('/proc/'.$pid)运行。3.1. 如果pid有效(进程正在运行),它什么也不做,只是退出。3.2. 如果pid无效,则执行worker.php。我还在这里添加了邮件通知。
到目前为止,我发现cron作业是最可靠的,所以我采用了这个解决方案。