php Laravel队列进程超时错误

pkmbmrz7  于 2022-12-25  发布在  PHP
关注(0)|答案(4)|浏览(353)

我在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)的帖子,但是我不知道如何访问这个进程对象,或者这是否能解决这个问题。
任何帮助都将不胜感激。

bt1cpqcv

bt1cpqcv1#

添加--timeout=0对我的设置起作用。

**UPDATE:**因此,整个命令将为php artisan queue:listen --timeout=0

c3frrgcw

c3frrgcw2#

在投入了大量时间之后,我得到了解决方案
在作业类中添加下面的行,即使您将作业放在crontab条目中,作业也会运行而不会超时

public $timeout = 0;
nr9pn0ug

nr9pn0ug3#

这是Laravel v5.3中的已知bug
您应该升级到v5.5以解决此问题。
另一种方法是如here所述对源代码进行黑客攻击

rmbxnbpk

rmbxnbpk4#

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

相关问题