0

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

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

怎么了:

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

  • 当我将代码作为我的 Web 应用程序的一部分运行而没有最终的 & 符号时,该作业运行良好 - 但exec()在加载下一页之前等待脚本完成,当用户盯着无响应的页面时,无法达到目的。

  • script.php > /dev/null 2> /dev/null &当我从带有最后一个&符号的控制台以我自己的身份运行 shell 命令时,作业运行良好。

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

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

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

我没有将其作为 cronjob 运行,因为我的主机 (NearlyFreeSpeech) 只能每小时运行一次 cronjobs,这比我想让用户等待的工作只需要几分钟的时间还要多——它可能会在用户时触发启动它。

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

4

1 回答 1

0
set_time_limit 

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

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

于 2015-07-22T06:13:30.823 回答