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
はデフォルトで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
を実行する必要がある場合があります。
私のケースを共有したいだけです。
まず、使用したユーザーにはログファイルへの書き込みアクセス権がなかったため、Sudoユーザーとして追加しました。
次に、Supervisorがエラーログファイルに書き込めるようになったので、PHPスクリプトを実行しようとすると、解析エラーが発生したことがわかりました。エラーを修正し、Supervisorがスクリプトを完全に実行するようになりました。
これが誰かにも役立つことを願っています。