Php 为什么我的Laravel队列作业在60秒后失败?
形势 我使用Laravel队列处理大量媒体文件,单个作业预计需要几分钟(最多一个小时) 我使用Supervisor运行我的队列,一次运行20个进程。我的主管配置文件如下所示:Php 为什么我的Laravel队列作业在60秒后失败?,php,laravel,queue,Php,Laravel,Queue,形势 我使用Laravel队列处理大量媒体文件,单个作业预计需要几分钟(最多一个小时) 我使用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 -
[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
将导致无限超时
问题
如何防止这种临时“失败”作业状态?是否有其他我不知道的地方可能会调用队列超时?事实证明,除了超时之外,还有一个
expire
设置,定义在config/queue.php
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'expire' => 60,
],
将其更改为更高的值就成功了
更新:此参数现在称为
retry\u after
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 60,
],
重要提示:“expire”现在称为“retry\u after”(Laravel 5.4)这将起作用
php artisan queue:listen --timeout=1200
根据需要调整时间检查php.ini上的
max\u execution\u time
?如果是60秒,那就是你的问题。尝试增加超时。很棒的想法@WillyPt——但是php.ini设置不会终止整个脚本吗?它继续解决。(FWIWmax_execution\u time
设置为30秒,我将按照这些思路进行探索和实验)。谢谢您,先生,这有助于我解决问题。但正如David的回答所指出的,“过期”现在被称为“之后重试”