我在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)
的帖子,但我不知道如何访问该过程对象,或者甚至可以解决问题。
非常感谢任何帮助。
答案 0 :(得分:54)
添加--timeout=0
适用于我的设置。
<强>更新强>
因此整个命令为php artisan queue:listen --timeout=0
。
希望这有帮助。
答案 1 :(得分:1)
答案 2 :(得分:1)
队列主要针对需要大量时间完成的请求进行链接批量发送邮件,导入数据队列作业在后台运行。它也提高了我们的网络应用性能。如果我们不设置超时,则默认为 60 秒。时间间隔,如果我们将超时设置为 0,则意味着我们设置了无限超时,请求将持续运行直到无法完成。要设置超时,我们必须运行以下命令:php artisan queue:listen --timeout=0
官方文档参考链接:https://laravel.com/docs/8.x/queues
答案 3 :(得分:0)
花费大量时间后,我找到了解决方案
在“作业”类别中添加以下行,您的作业就不会超时, 即使您将工作放在crontab条目中
public $ timeout = 0;