当前位置: 首页 > 知识库问答 >
问题:

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

唐永春
2023-03-14

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

有一个执行这些PHP脚本的Bash脚本。当我通过CLI调用这个Bash脚本作为根时,所有的PHP脚本都没有任何问题地完成了。但是当我通过浏览器调用带有PHP exec()函数的Bash脚本时,脚本在7/8分钟后突然停止,没有抛出任何错误。

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

我试过:

  • 设置时间限制(0)
  • exec('nohup/path/to/bashscript')
  • exec('/path/to/bashscript|at now')

最后两个尝试过的解决方案是由其他有长时间运行脚本问题的人推荐的,但它对我一点帮助都没有。

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

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

共有2个答案

法和硕
2023-03-14

设置:

ini_set('max_execution_time', 0);

在你剧本的最上面。这将禁用时间限制。然而,在浏览器中执行20分钟的脚本没有多大意义。

郑俊彦
2023-03-14

您需要使用增加最大执行时间(小心设置0,它会使您的执行时间无限)

 ini_set('max_execution_time', 0);

但我会推荐给用户

   proc_open();

overexec();这将通过管道传输您的进程,您也可以创建其他进程。阅读更多有关proc_open[此处]http://www.sitepoint.com/proc-open-communicate-with-the-outside-world/!

 类似资料:
  • 我有一个hello world测试Lambda,配置为: 触发器:API网关 目的地:亚马逊SQS。一个队列表示成功,另一个队列表示失败 当我通过CLI调用Lambda时,消息会按预期排队到成功队列中: 但是,当我通过API网关调用Lambda时,没有消息排队到任何一个目标队列。我启用了Lambda代理集成。Cloudwatch指标确认调用成功(调用计数上升,错误计数不上升)。以下从我的Lambd

  • 本文向大家介绍Java通过调用FFMPEG获取视频时长,包括了Java通过调用FFMPEG获取视频时长的使用技巧和注意事项,需要的朋友参考一下 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,li

  • 我正在从恶作剧者迁移到无头铬的过程中。 有趣的是,当在聚焦元素后放置时,规范也通过了无头铬! 我在这里能做什么?我在正确的轨道上?我应该尝试https://github.com/twalpole/appariation驱动程序吗?

  • 问题内容: 我写了Python脚本来处理大量的大文本文件,并且可能 要花费很多时间 。有时,需要停止正在运行的脚本并在以后恢复它。停止脚本的可能原因是程序崩溃,磁盘空间不足或需要执行此操作的其他原因。我想为脚本实现一种“停止/恢复”机制。 在 车站 :脚本退出和保存其当前状态。 在 简历 :剧本开始,但是从最新的保存状态持续 我将使用 pickle 和 信号 模块来实现它。 我将很高兴听到如何以p

  • 我试图通过Google应用程序脚本获取XML,然后将这些值传递给Google工作表。在几次迭代中,一切正常。如果我尝试更多,我将超过执行的最长时间。 下面的代码会导致错误消息“超过最大执行时间”。如果我降低迭代次数(3),它将起作用。但是我需要迭代大约20K行。 饲料结构 有什么建议吗,有什么问题吗? 非常感谢你

  • 我有这样的设置: 所有.飞镖只是导入脚本1.飞镖和脚本2.dart并调用它们的主要。目标是在细节下有一堆可以单独运行的脚本。此外,我想要一个单独的 all.dart 脚本,可以一次运行所有脚本。这将使调试单个脚本更简单,但仍允许所有脚本运行。 all.dart 脚本1.飞镖 脚本2.dart 所以,这是工作,我看到运行时预期的打印语句all.dart但我有两个问题。 首先,我必须在详细信息下软链接