情况
我使用Laravel Queues处理大量媒体文件,预计单个作业需要几分钟(最多只需要一个小时)。
我正在使用Supervisor来运行我的队列,我一次运行20个进程。我的超级用户配置文件如下所示:
[program:duplitron-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/duplitron/artisan queue:listen database --timeout=0 --memory=500 --tries=1
autostart=true
autorestart=true
user=duplitron
numprocs=20
redirect_stderr=true
stdout_logfile=/var/www/duplitron/storage/logs/duplitron-worker.log
有些奇怪的事情我不知道如何解释或纠正:
我坚信这是一个超时问题;但是,我认为--timeout=0
会导致无限制的超时。
问题
如何防止这种暂时的"失败"工作状态?是否有其他地方可能会调用我不知道的队列超时?
答案 0 :(得分:14)
事实证明,除了超时,expire
config/queue.php
设置
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'expire' => 60,
],
将其更改为更高的值就可以了。
答案 1 :(得分:5)
重要提示:“expire”现在称为“retry_after”(Laravel 5.4)
答案 2 :(得分:0)
这将起作用
php artisan queue:listen --timeout=1200
根据需要调整时间