2015-08-28 97 views
0

我有一个PHP脚本,执行一些操作不到10分钟(当它不冻结)。重新启动PHP脚本循环,如果它需要超过X秒

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

我已经试过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); 

} 
+0

也许使用这个,你可以重新启动自动你的代码:http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error – zeflex

回答

0

我有我们的服务器上运行的PHP脚本,是那种一对夫妇的关键作业的工人。我有另一个脚本作为一个cron作业,“保持眼睛”在这一个上。这里是整个事情的样子:

  1. 有worker.php其中有一个“而(1)”循环,因此不会死并运行该计划一monitor.php每15分钟2个脚本
  2. 使用getmypid(),每次循环开始时(这种方式总是更新pid),worker.php将它的pid写入一个文件
  3. 每当cron作业执行monitor.php时,每隔15分钟它会读取pid该文件并检查进程是否正在运行ps或file_exists('/ proc /'。pid) 3.1。如果pid有效(进程正在运行),它就不会执行任何操作。 3.2。如果pid无效,它将执行worker.php。我也在这里添加了一个邮件通知。

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