Laravel队列进程超时错误

时间:2014-09-16 20:21:28

标签: php symfony laravel timeout queue

我在Laravel上使用php artisan queue:listen来运行排队的工作。其中一项工作相当复杂,需要很长时间,因此我收到以下错误:

[Symfony\Component\Process\Exception\ProcessTimedOutException]                                                                                                                                                                              
The process ""/usr/local/Cellar/php55/5.5.14/bin/php" artisan queue:work  
--queue="QUEUE_URL" --delay=0 --memory=128 --sleep=3 --tries=0" 
exceeded the timeout of 60 seconds.

我知道我可以使用任意高的超时值运行queue:listen,但这并不理想,因为我希望它在某些情况下超时进程实际上无法响应。我尝试在作业调用的函数中定期调用set_time_limit(60),但这并没有解决我的问题。

我发现在线提及Symfony\Component\Process\Process->setTimeout(null)的帖子,但我不知道如何访问该过程对象,或者甚至可以解决问题。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:54)

添加--timeout=0适用于我的设置。

<强>更新 因此整个命令为php artisan queue:listen --timeout=0

希望这有帮助。

答案 1 :(得分:1)

这是Laravel v5.3中已知的bug

您应升级到v5.5以解决此问题。

另一种方法是按照here

所解释的那样破解源代码

答案 2 :(得分:1)

队列主要针对需要大量时间完成的请求进行链接批量发送邮件,导入数据队列作业在后台运行。它也提高了我们的网络应用性能。如果我们不设置超时,则默认为 60 秒。时间间隔,如果我们将超时设置为 0,则意味着我们设置了无限超时,请求将持续运行直到无法完成。要设置超时,我们必须运行以下命令:php artisan queue:listen --timeout=0

官方文档参考链接:https://laravel.com/docs/8.x/queues

答案 3 :(得分:0)

花费大量时间后,我找到了解决方案

在“作业”类别中添加以下行,您的作业就不会超时, 即使您将工作放在crontab条目中

public $ timeout = 0;