Laravel队列超时问题

时间:2018-10-21 10:53:01

标签: laravel laravel-5 laravel-5.6 supervisor

我的工作最多需要6个小时才能完成。我正在使用laravel数据库驱动程序进行队列,以下是工作程序:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravel/artisan queue:work --queue=default,high,medium,low,least --daemon --timeout=86400
autostart=true
autorestart=true
user=root
numprocs=50
redirect_stderr=true
stdout_logfile=/var/www/html/laravel/worker.log

问题:

正在执行的作业立即从jobs表中删除,进程开始执行队列。但是,该作业尚未完成,但仍从jobs表中删除。理想情况下,它将保留在jobs表中,直到作业未完成。

2 个答案:

答案 0 :(得分:0)

我假设您使用Horizon?如果这样,请在您的config/horizon.php中设置一个超时时间,就像这样:

'supervisor-1' =['connection' => 'long_running',
                 'queue'      => 'long_running',
                 'balance'    => 'simple',
                 'processes'  => 1,
                 'tries'      => 1,
                 'timeout'    => 21600], // 6h in seconds

也请尝试调整retry_after中的config/queue.php

答案 1 :(得分:0)

  

执行中的作业立即从作业表中删除a   进程开始执行队列。但是,作业尚未完成   但它仍然会从Jobs表中删除。

作业要做保留在作业表中,直到完成。辅助进程在检索作业时将设置reserved_at字段,但不会将其从表中删除。

您是否检查过作业没有移到failed_jobs表中?

或者,您确定作业不是报告成功,而是以看来好像尚未完成的方式失败?例如,如果您的工作是通过运行ffmpeg处理视频,则ffmpeg进程可能会失败,但是除非您正在检查退出代码,否则您的工作进程将不知道。

此外,我是否正确理解您有50个尝试从数据库队列驱动程序检索作业的进程?您的日志是否显示任何迹象表明工作人员无法检索桌子上的锁?

另一注:队列工作人员的--daemon选项已被弃用。