[英]PHP script stops running with 503 service unavailable
我有自己的 PHP 脚本来发送时事通讯。 它工作得很好。 最近,我的托管服务提供商给我指出了一个配额:30 封邮件/分钟。 因此,在每次发送邮件之间,我插入sleep(2);
.
由于该更改,5 分钟(300 秒)后,脚本停止并返回:
暂停服务
由于维护停机或容量问题,服务器暂时无法为您的请求提供服务。 请稍后再试。 此外,在尝试使用 ErrorDocument 处理请求时遇到了 503 Service Unavailable 错误。
四观察。
在我的脚本开头,我放了这两行:
ignore_user_abort(true); set_time_limit(0);
所以,问题不是出在 max_execution_time 变量上(我验证:确实被修改了)。
该脚本在localhost
上正常工作,其中 PHP ini 变量比在我的 web 主机上更受限制。 所以,问题不是来自memory_limit
变量。
我认为它可能是 Apache 超时变量限制(300)。 但是我的主机提供商对此持怀疑态度......
服务器在 PHP 5.5 上运行。
是什么原因造成的?
之前的脚本(它适用于 PHPMailer):
// all email addresses
while ($row = $result->fetch_array())
{
// ...
if ($mail->send())
{
echo "success : " . $row["mail"] . "<br/>";
}
else
{
echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>";
}
}
后:
// all email addresses
while ($row = $result->fetch_array())
{
...
if ($mail->send())
{
echo "success : " . $row["mail"] . "<br/>";
}
else
{
echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>";
}
sleep(2);
}
我认为在服务器上使用mod_fastcgi或equals。
看看这篇老帖子http://www.binarytides.com/php-set-time-limit/
例如,mod_fastcgi有一个名为“-idle-timeout”的选项,它控制脚本的空闲时间。 因此,如果脚本没有向fastcgi处理程序输出任何内容,那么fastcgi会终止它。 设置有点像这样:
Apache <-> mod_fastcgi <-> php processes
您应该使用队列和crontab,队列每分钟处理一次。
希望这可以帮助。
这可能是很多事情,甚至是文件权限。 我会首先撤消您的更改,看看它是否再次运行。 如果没有,那么你知道它不是导致问题的sleep()命令。 如果是sleep命令,则问题可能与等待php响应时的超时有关。 尝试睡眠时间为.1秒,只是为了测试它是否有效。
我遇到过类似的问题。
这可能对其他人有帮助,而不是对给定问题的直接回答。
class 中的 2 个方法互相调用。
function method1(){
method2();
}
function method2(){
method1();
}
它比这个例子复杂一点
在这种情况下期待不同的错误......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.