Laravel队列进程超时错误


Laravel queue process timeout error

我在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)的线程,但我不知道如何访问该进程对象,也不知道这是否能解决问题。

任何帮助都将不胜感激。

添加--timeout=0对我的设置有效。

更新:因此,整个命令将是php artisan queue:listen --timeout=0

在投入大量时间后,我得到了解决方案

在作业类中添加下面的行,您的作业将运行而不会超时,即使您将作业放入crontab条目

public $timeout = 0;

这是Laravel v5.3中的一个已知错误:

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

另一种方法是破解源代码,如下所述

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

这是官方文件的参考链接:https://laravel.com/docs/8.x/queues