将后台PHP脚本作为Web运行时出现超时问题

时间:2015-07-22 05:39:40

标签: php linux shell nearlyfreespeech

我有一个PHP脚本做了一些繁重的工作,我正试图使用​​以下代码作为后台脚本启动:

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

会发生什么:

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

  • 当我在没有最终版本的情况下将代码作为我的网络应用程序的一部分运行时 &符号,作业运行良好 - 但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)每小时只能运行一次cronjobs,这比我想让用户等待工作只需要几分钟的时间更多 - 它可能也是如此用户启动它时会触发。

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

1 个答案:

答案 0 :(得分:0)

set_time_limit 

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

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