长时间运行的PHP脚本在通过exec()调用时停止,但在通过CLI调用时结束

我有一堆需要很长时间才能完成的脚本。 其中一些可能需要长达20分钟。

有一个执行这些PHP脚本的Bash脚本。 当我以root的身份通过CLI调用这个Bash脚本时,所有的PHP脚本都没有任何问题。 但是当我用PHP的exec()函数通过浏览器调用Bash脚本时,脚本在7/8分钟后突然停止,而不会引发任何错误。

对于通过Apache / PHP执行的进程或脚本可以运行的时间是否有一定的限制?

我试过了:

  • set_time_limit(0)
  • exec('nohup /path/to/bashscript')
  • exec('/path/to/bashscript | at now')

最后两个尝试过的解决scheme已经被长期运行脚本有问题的其他人推荐,但是它根本没有帮助我。

注意:执行PHP脚本的Bash脚本是CakePHP的控制台应用程序。 我必须通过这个Bash脚本执行PHP脚本来利用CakePHP的所有function(模型,shell方法等)。 我需要能够通过浏览器调用Bash脚本,并让它在后台运行。

服务器是VPS,并安装了WHM / cPanel。

你需要增加最大的执行时间(小心,而设置0,这使得你的执行时间无限)

  ini_set('max_execution_time', 0); 

但我会推荐给用户

  proc_open(); 

在exec(); 这将管道你的进程,你也可以定制其他进程。 阅读更多关于proc_open [HERE] http://www.sitepoint.com/proc-open-communicate-with-the-outside-world/

组:

 ini_set('max_execution_time', 0); 

在你的脚本的顶部。 这将禁用时间限制。 但是,在浏览器中执行20分钟的脚本没有什么意义。