1. ホーム
  2. laravel

queue:work -daemonとqueue:listenの違いは何ですか?

2023-09-22 07:18:35

質問

オフラインのジョブサーバーをセットアップしているところです。ドキュメントを読みましたが、2 つのコマンドの違いがよくわかりません。 artisan queue:work --daemonartisan queue:listen . デーモンの実行にはどのコマンドを使うべきでしょうか?

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

2017-04-07に更新された編集。

キューを実行する方法が3つになりました。

  • queue:work - これは新しいデーモンプロセスです(このフラグはもはや必要ありません)。フレームワークは一度だけ起動し、ジョブを通してループしつづけます。これは無限に続きます。メモリやCPUの使用量は queue:listen よりも少ないメモリとCPUで済みます。また、忘れずに queue:restart を使って、パッチ適用中にプッシュしたコードの変更をキューに強制的に反映させることも忘れてはいけません。

  • queue:work --once - これはフレームワークを起動し、1つのジョブを処理し、そしてシャットダウンします。開発中のテストなどに便利です。

  • queue:listen - これは、すべてのサイクルでフレームワークを起動し、1つのジョブを処理し、その後完全にシャットダウンし、再びフレームワークを起動するなどして、無限にループします。これは、各ジョブが処理された後、すべてのメモリとプロセスが解放されることを意味します。もしメモリリークを queue:work - でメモリリークがある場合は、これを試してみてください。

--daemon フラグは、もはやこれらのコマンドに影響を与えません。

オリジナルの回答です。

2つの異なる問題が記載されています。

あるのは artisan queue:workartisan queue:listen

  • queue:work は、単にキューの次のジョブをポップオフして、そのジョブだけを処理します。これは「ワンオフ」コマンドで、1 つのキュー コマンドが処理されるとコマンド プロンプトに戻ります。
  • queue:listen は、キューをリッスンし、受け取ったキューコマンドを処理しつづけます。これは、あなたが止めるまで無限に実行し続けます。

Laravel >=4.2には --daemon コマンドが追加されました。その動作は、すべてのキューが処理された後にフレームワーク全体を再起動するのではなく、単にキューを直接実行し続けるというものです。これは、オプションのコマンドで は著しく これはオプションのコマンドで、キューのメモリと CPU の必要量を 減らします。

で重要な点は --daemon コマンドの重要な点は、アプリケーションをアップグレードする際に、特にキューを再起動させる必要があるということです。 queue:restart でキューを再起動する必要があるということです。そうしないと、キューがまだ古いコードをメモリ上に保持しているため、潜在的にあらゆる種類の奇妙なエラーが発生する可能性があります。

ですから、あなたの質問に答えるために " デーモンを実行するためにどのコマンドを使用すべきですか。 という質問に対しては、ほとんどの場合、次のように答えます。 queue:work --daemon