1. ホーム
  2. laravel

[解決済み] Laravel Queue システムをサーバー上で動作させる方法

2023-03-06 12:10:08

質問

最近、Laravelのキューシステムをセットアップしました。基本は、cronjobがキューにジョブを追加するコマンドを呼び出し、メールを送信する2番目のコマンドを呼び出すことです。

私のサーバーにsshし、php artisan queue:listenを実行すると、システムは動作しますが、ターミナルを閉じるとリスナーはシャットダウンし、ジョブは積み重なり、私が再びsshしてlistenを実行するまでキューに座ったままになります。

ssh 経由で接続を開いたままにすることなく、キュー システムをバックグラウンドで実行し続けるための最良の方法は何でしょうか。

私は php artisan queue:work --daemon を実行してみたところ、キュー内のジョブは完了しましたが、ターミナルを閉じたときに、接続とバックグラウンド・プロセスが閉じられました。

どのように解決するのですか?

実行中

nohup php artisan queue:work --daemon &

ログアウト時にコマンドが終了するのを防ぎます。

末尾のアンパサンド(&)はバックグラウンドでプロセスを開始させるので、スクリプトが終了するまで待つ必要がなく、シェルを使い続けることができます。

参照 nohup

nohup - ハングアップしないようにコマンドを実行し、tty 以外に出力します。

これは、コマンドを実行したディレクトリにある nohup.out というファイルに情報を出力します。もし出力に興味がなければ、stdoutとstderrを/dev/nullにリダイレクトするか、同様に通常のlaravelのログに出力することが可能です。例えば

nohup php artisan queue:work --daemon > /dev/null 2>&1 &

nohup php artisan queue:work --daemon > app/storage/logs/laravel.log &

しかし、次のようなものも使用する必要があります。 Supervisord のようなものを使って、サービスが稼働し続け、クラッシュや失敗の後に再起動されることを保証する必要があります。