当尝试运行 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 秒。
至于你的脚本,如果你的脚本被关闭并重新启动,脚本会从它停止的地方开始吗?如果是这样,CRON 作业可能对你来说是一个好主意。
看来 hostgator 也不允许在短于 15 分钟的间隔内运行 CRON 作业。
希望这可以帮助!
答案3
Hostgator 支持人员给出的回复如下:
在我们的共享服务器上,我们确实有自动监控系统,它会根据某些资源使用情况中断进程以促进稳定的环境。正如您所发现的,我们实施的限制之一是任何用户进程的最大运行时间为 45 分钟。我们可以确认,如果您在 shell 中或通过 php exec() 等运行此脚本,它仍会在 45 分钟后被终止。
您可以通过在我们的共享环境之外执行脚本(例如在 VPS 或专用服务器上)来解决此限制。