PHP 脚本在 CentOS(共享主机)下的 Apache 上超时或被终止

PHP 脚本在 CentOS(共享主机)下的 Apache 上超时或被终止

当尝试运行 PHP 脚本(CentOS、Apache、PHP 5.2)时,这可能需要很长时间,它显然会在 45 分钟后被终止。

PHP 脚本从 Web 浏览器调用,在某些情况下,它将作为自动监控系统的一部分处理 POP3 邮箱和发送电子邮件等大量工作。

从命令行运行 PHP 脚本可能是一个更好的选择,但我想了解目前发生的情况。

我运行了一个测试脚本,45 分钟后它似乎最终出现了内部服务器错误(500?)。

如果发生了这种情况,这个限制是在哪里设置的,是什么导致脚本被终止?

它在 Hostgator.com 上的共享主机上运行。

答案1

我假设您已经在 PHP 中执行了 set_time_limit(0) 来关闭该特定脚本的 PHP 最大执行时间?http://nz.php.net/manual/en/function.set-time-limit.php

如果您还没有尝试过 - 这可能就是答案 - 如果您尝试过 - 那么请继续阅读...

Linux 允许您为用户进程设置最大运行时间 - 共享主机通常这样做是为了终止任何挂起的脚本(否则您可能必须重新启动服务器才能终止它们 - 至少系统管理员必须手动执行此操作)

我似乎找不到之前看到的信息——我很确定这是这个的延伸http://gerardnico.com/wiki/linux/limits.conf

无论如何,您都必须找到一种方法来加快脚本的速度 - 为什么它需要 45 分钟才能运行?您能把它分成几个部分吗? - 等待网络服务器 45 分钟的响应实际上并不实用(如果您多次点击刷新并运行脚本 - 或者网络蜘蛛在您不知情的情况下点击并触发它......服务器会受到负面影响吗?)

答案2

Hostgator 的 PHP 脚本执行时间最长为 30 秒。

Hostgator PHP.ini 无法更改的变量

至于你的脚本,如果你的脚本被关闭并重新启动,脚本会从它停止的地方开始吗?如果是这样,CRON 作业可能对你来说是一个好主意。

Hostgator 支持 - Cron 作业

看来 hostgator 也不允许在短于 15 分钟的间隔内运行 CRON 作业。

希望这可以帮助!

答案3

Hostgator 支持人员给出的回复如下:

在我们的共享服务器上,我们确实有自动监控系统,它会根据某些资源使用情况中断进程以促进稳定的环境。正如您所发现的,我们实施的限制之一是任何用户进程的最大运行时间为 45 分钟。我们可以确认,如果您在 shell 中或通过 php exec() 等运行此脚本,它仍会在 45 分钟后被终止。

您可以通过在我们的共享环境之外执行脚本(例如在 VPS 或专用服务器上)来解决此限制。

相关内容