超时问题后台运行PHP脚本的Web

超时问题后台运行PHP脚本的Web

问题描述:

我有一个PHP脚本,做我正在尝试使用下面的代码断火作为后台脚本一些繁重的时候:超时问题后台运行PHP脚本的Web

exec("script.php > /dev/null 2> /dev/null &");

会发生什么:

  • 当我运行上面的代码作为我的web应用程序的一部分,该脚本后约一分钟退出 。

  • 当我运行的代码没有最后 符号我的web应用程序的一部分,作业精细运行 - 但exec()等待脚本 完全加载下一页,击败目的为用户盯着前一个没有反应的页面。

  • 当我使用最后的&符从控制台运行shell命令script.php > /dev/null 2> /dev/null &时,作业正常运行。

  • 当我作为web从控制台运行shell命令时,大约一分钟后作业停止运行。

我已经尝试将输出管道输送到日志文件:script.php > /home/public/tmp/output.txt 2> /home/public/tmp/errors.txt &。输出看起来很正常,我没有得到任何错误。脚本停止工作。

基本规则似乎是:如果作为web运行为前台进程或作为我运行,它将完成。如果作为网站作为后台进程运行,大约一分钟后它将停止工作。

我没有将它作为cronjob运行,因为我的主机(NearlyFreeSpeech)每小时只能运行一次cronjob,这比我想让用户等待的时间只需要几分钟 - 这可能是因为当用户启动它时会发生火灾。

下标以set_time_limit(60 * 60 * 4);开头,所以这不应该是PHP超时的问题。

+0

尝试将您的输出管道输出到日志文件,以查看是否有错误或意外发生了'script.php> /tmp/script.log 2>&1&' –

+0

试过了。它只是毫不客气地停下来。 – schnauss

+0

60秒确实听起来像超时问题...尝试将'phpinfo()'转储到您的输出日志中,以确保'max_execution_time'正在由'set_time_limit()'调用更新? (托管公司可以限制你可以设置的防止对其他用户的不利影响) –

set_time_limit 

不包括shell执行时间。 http://php.net/manual/en/function.set-time-limit.php

尝试在该网站的评论中使用代码示例。

+0

不是真的,我只是自己测试; 'set_time_limit(1)'给我'致命错误错误:超过1秒的最大执行时间'。 – schnauss