Laravelでワーカーのプロセス監視をせずにキューを常駐させる
本番環境では、queue:work
プロセスを実行し続ける手段が必要です。queue:work
プロセスは、ワーカタイムアウトの超過や、queue:restart
コマンドの実行など、さまざまな理由で実行を停止する場合があります。
このため、queue:work
プロセスが終了したことを検出し、自動的に再起動できるプロセスモニタを構築する必要があります。https://readouble.com/laravel/8.x/ja/queues.html
php artisan queue:work
でワーカーを立ち上げると、そのプロセスが死んでるとキューに入ったものが処理されなくなってしまいます。さらにコードが変わったときのプロセス再起動も必要になると…。
正統はプロセス監視を行うのがいいんでしょうが、ちょっとめんどくさかったのでcronで対応してみました。
* * * * * cd MyApp/ && php artisan queue:work --once --env=production >> /dev/null 2>&1
* * * * * cd MyApp/ && php artisan queue:work --stop-when-empty --env=production >> /dev/null 2>&1
このようにcronで一分に一回ワーカーを立ち上げることで、ほぼ常駐しているのと同じような状態を作り出せます(最大一分の処理遅延を許容できるなら)。これならコードが変わっても再立ち上げも必要なし。
「
--once
」ならキューに入ってるものを1つだけ処理。「
--stop-when-empty
」ならキューが空になるまで処理してくれます。プロセスが多重で立ち上がったりしないかとも思いましたが、今のところそんなこともなさそうでちゃんと使えています。
ディスカッション
コメント一覧
まだ、コメントがありません