“长时间运行”的 PHP 脚本使用“header(“Location: $url”);”失败,并显示“重定向状态代码:500”
我每小时运行一次Cron工作,可以启动多个“作业”完成。
cron作业指向一个启动“背景脚本”的PHP文件,该文件在必要时多次重复。
完成每个“工作”的时间可能会花费未知的时间,但始终在不到20分钟的时间内完成。因此,设置了服务器“ max_execution_time”以允许脚本运行20分钟以防止超时。
如果脚本有4个工作,每个作业需要10分钟,则总执行时间将超过20分钟。
我对如何解决此问题的想法是在一个“工作”结束后使用标题(“位置:$ url”)来启动“下一个工作”的新脚本重新启动,并获得20分钟的新分钟。<
只要“工作”只需要几分钟,一切都可以。但是,当它达到需要12分钟的“工作”时。标题(“位置:$ url”)失败,
500内部服务器错误
其次是:
此外,一个500个内部服务器错误
尝试使用错误记录来处理请求时遇到了错误。
即使包括以前的“工作”(包括以前的“工作”)的总登记时间少于20分钟。
我不超过cron的工作重定向,并且没有超过执行时间的20分钟(包括所有当前的“工作”)。
因此,即使我考虑使用标头(“位置:$ url”)来防止将来的总执行时间超过20分钟。在达到重定向或执行时间的限制之前,我已经有失败。
目前失败的是6个“作业”,前4分的总执行时间为2,5分钟。 5:工作是12分钟。将位置重定向到最后6个:由于标题(“位置:$ url”)在5:TH工作已经运行12分钟之后失败。所有“作业”的总执行时间至今仅为14,5分钟,重定向为5(允许重定向为60)。
如果我将12分钟的工作切换到其他6个较短的跑步工作,总共有10个较短的工作,一切正常。
因此,似乎有与脚本的运行时间以及标题(“位置:”)工作有关的内容?
我知道该解决方案不是处理此类任务的最佳(或任何好的)方法。但是这条路使我在开发过程中达到了这一点,并找出为什么在我重写新的“工作”处理程序时,这500个内部错误会使该解决方案起作用。
因此,欢迎任何帮助:)
790463785
注意:
我制作了一个自定义的500错误页面,将我指向了标题(“位置”)作为问题,这给了我以下有关WHA要求的信息:
请求的URL:“ $ URL IM实际上重新加载在这里介绍”
重定向状态代码:500
值得一提。错误还说:
此外,一个500个内部服务器错误
尝试使用错误记录来处理请求时遇到了错误。
因此目前没有错误日志
我怀疑您收到的 500 错误实际上与脚本发现其环境与预期不同有关。
例如,某些会话或数据库连接已过期。
我建议您将
error_reporting
设置为最大值,并为错误级别添加适当的日志记录(包括启动错误)。
如果不详细了解作业的作用及其工作方式,则不可能猜出错误的确切原因。重定向 有效 ,正如您的自定义处理程序所演示的那样。问题是 新脚本实例 失败了。
另一种可能性是重定向到诊断脚本,该脚本只是将
$_SERVER
、
$_SESSION
等的内容转储到文件中。然后,开始将作业管理器脚本的内容添加到诊断脚本中,直到它再次因 500 错误而中断。
首先,您应该检查错误日志以获取确切的错误消息。 如果没有确切的消息,我们无法提供详细的答案。 此外,如何将最后一个作业存储在某个地方(文本文件/数据库),以继续下一个作业。
例如:
<?php
$id_job = 0;
switch($id_job)
{
case 10:
job1();
case 20:
job2();
}
在每个作业之后,只需设置当前/已完成作业的 id_job,并在输入 switch/case 之前添加 10。