Laravel 与主管排队 - 进入致命状态,太多启动重试太快

Laravel queues with Supervisor - Entered FATAL state, too many start retries too quickly

我正在尝试对主管使用 Laravel 队列,但该服务无法正常工作。我的 /var/log/supervisor/supervisord.log 是:

2018-06-18 10:56:07,441 INFO spawned: 'laravel-worker_00' with pid 20838
2018-06-18 10:56:07,446 INFO spawned: 'laravel-worker_01' with pid 20839
2018-06-18 10:56:08,021 INFO exited: laravel-worker_01 (exit status 255; not expected)
2018-06-18 10:56:08,033 INFO gave up: laravel-worker_01 entered FATAL state, too many start retries too quickly
2018-06-18 10:56:08,033 INFO exited: laravel-worker_00 (exit status 255; not expected)
2018-06-18 10:56:09,034 INFO gave up: laravel-worker_00 entered FATAL state, too many start retries too quickly

我的配置 /etc/supervisord.d/laravel-worker.conf 是:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/my-project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=root:root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/my-project/worker.log

当我尝试重新启动所有程序时:

$ sudo supervisorctl restart all
$ laravel-worker:laravel-worker_00: ERROR (abnormal termination)
$ laravel-worker:laravel-worker_01: ERROR (abnormal termination)

我是新手,有主管所以有人可以指导我吗?

您需要将 startsecs = 0 添加到您的 laravel-worker 配置中,如下所示:

[program:laravel-worker]     
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/my-project/artisan queue:work --sleep=3 --tries=3
.....
startsecs = 0

startsecs默认为1s,如果程序没有熬到1s就会认为启动失败。将它设置为 0,这样程序就不需要在任何特定的时间内保持 运行ning。您可以查看此 github 问题以获取更多信息:https://github.com/Supervisor/supervisor/issues/212

如果你运行守护进程模式的队列工作者,使用--daemon标志会更好:command=/usr/bin/php /var/www/my-project/artisan queue:work database --daemon --sleep=3 --tries=3

更改配置文件后,您可能需要 运行 supervisorctl reload 以使更改生效。

只是想分享我的案例。

首先,我使用的用户无权写入日志文件,因此我将其添加为 sudo 用户。

其次,既然 Supervisor 可以写入错误日志文件,我看到在尝试 运行 PHP 脚本时出现解析错误。我修复了错误,现在主管 运行 完美地编写了脚本。

希望这对其他人也有帮助。