web-dev-qa-db-ja.com

Laravelスーパーバイザーのキュー-致命的な状態になりました。再試行の開始が速すぎます

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)

私はスーパーバイザーの初心者なので、誰かが私を導くことができますか?

4

次のように、startsecs = 0laravel-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はデフォルトで1秒です。プログラムが1秒間起動しない場合、起動は失敗と見なされます。 0に設定すると、プログラムが特定の時間実行され続ける必要がなくなります。詳細については、この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を実行する必要がある場合があります。

12
DAMIEN JIANG

私のケースを共有したいだけです。

まず、使用したユーザーにはログファイルへの書き込みアクセス権がなかったため、Sudoユーザーとして追加しました。

次に、Supervisorがエラーログファイルに書き込めるようになったので、PHPスクリプトを実行しようとすると、解析エラーが発生したことがわかりました。エラーを修正し、Supervisorがスクリプトを完全に実行するようになりました。

これが誰かにも役立つことを願っています。

1
Paolo