为什么我的Laravel队列作业在60秒后失败?

时间:2015-12-28 03:02:39

标签: php laravel queue

情况

我使用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

有些奇怪的事情我不知道如何解释或纠正:

  1. 我的工作在跑完60到65秒后一直失败。
  2. 在被标记为失败后,即使被标记为失败,作业仍继续运行。最终他们最终成功解决了问题。
  3. 当我run the failed task in isolation找到问题的原因时,它就成功了。
  4. 我坚信这是一个超时问题;但是,我认为--timeout=0会导致无限制的超时。

    问题

    如何防止这种暂时的"失败"工作状态?是否有其他地方可能会调用我不知道的队列超时?

3 个答案:

答案 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

根据需要调整时间