我的工作最多需要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
表中,直到作业未完成。
答案 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
选项已被弃用。