我正在使用Redis进行laravel队列作业,并使用主管来管理多个工作人员 我有一个以上的numprocs工作了好几天,然后主管下降即使主管处于活跃状态。
因为在主管中,当supervisord在配置文件中设置的值超过startretries
以启动程序/工作程序时,程序/工作人员会转到致命状态然后它将不会处理任何作业因此,当所有工人都处于这种状态时,主管就会失败。
然后我们需要手动重启Supervisor再次开始处理。
但这不适合解决这个问题
我的问题是为什么主管无法启动,解决方案是什么?
参考主管文件: - http://supervisord.org/subprocess.html
我的配置文件是这样的: -
[program:name]
process_name=%(program_name)s_%(process_num)02d
command=php /path/artisan queue:work --queue=queue1,queue2,queue3,queue4,default --tries=1 --daemon
autostart=true
autorestart=true
startretries=15
numprocs=150
user=root
redirect_stderr=true
stdout_logfile=/path/worker.log
stderr_logfile=/path/workerError.log
我的stdout日志文件看起来像这样
答案 0 :(得分:1)
相关日志条目为:
exited: laravelw_106 (exit status 0; not expected)
gave up: laravelw_106 entered FATAL state, ntoo many start retries too quickly
laravel队列工作程序在启动后会因某种原因立即停止。 队列工作者应该是长时间运行的。
你需要找出它退出的原因;也许你在工作的某个地方有exit()
或die()
陈述。
答案 1 :(得分:1)
您的消费者/工人在创业后很快就会死亡。消费者应该是在无限循环中运行的进程,等待任务/消息。你说任务完成后你有一个return(),也许这就是停止了工人。
尝试手动运行worker,然后在队列上生成消息。只完成一项任务后,工人不应该停止。