web-dev-qa-db-ja.com

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

オフラインジョブサーバーを設定しています。ドキュメントを読みましたが、2つのコマンドの違いはまだわかりません:artisan queue:work --daemonおよびartisan queue:listen。デーモンを実行するにはどのコマンドを使用する必要がありますか?

62
Logan Bailey

2017-04-07を更新した編集:

キューを実行するには、次の3つの方法があります。

  • queue:work-これは新しい「デーモン」プロセスです(フラグは不要になりました)。フレームワークは「1回」起動し、ジョブをループし続けます。これは無期限に続きます。フレームワークは常に稼働しているため、queue:listenよりも少ないメモリ/ CPUを使用します。また、queue:restartを使用して、パッチの適用中にプッシュしたコード変更をキューに強制的に更新させることも忘れないでください。

  • queue:work --once-フレームワークを起動し、1つのジョブを処理してからシャットダウンします。開発中などのテストに役立ちます。

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

--daemonフラグは、これらのコマンドに影響を与えなくなりました。

元の回答:

2つの異なる問題がリストされています。

artisan queue:workartisan queue:listenがあります

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

Laravel> = 4.2に--daemonコマンドが追加されました。動作方法は、すべてのキューが処理された後にフレームワーク全体を再起動するのではなく、キューを直接実行し続けることです。 が大幅に(-===-)キューのメモリとCPU要件を削減するオプションのコマンドです。

--daemonコマンドの重要な点は、アプリケーションをアップグレードするときに、queue:restartでキューを明確に再起動する必要があることです。そうしないと、キューにはまださまざまな奇妙なエラーが発生する可能性がありますメモリ内の古いコード。

だからあなたの質問に答えるには、「デーモンを実行するためにどのコマンドを使うべきですか?」-答えはほとんど常にqueue:work --daemonです

115
Laurence

物事は変更されましたしかし、それは文書に記載されていません

 --daemon  Run the worker in daemon mode (Deprecated)

今ではデフォルトでphp artisan queue:workはデーモンモードで実行され、

そう queue:workフレームワークを再起動せずにジョブの処理を続行します

一度実行する場合コマンドは、

php artisan queue:work --once

16
Alupotha

最も重要な違いは、queue:work --daemonは各jobでフレームワークを再起動せず、queue:listendoesで再起動することです。実際、listenは、各ジョブに対してまったく新しいLaravelプロセスを開始します。

自分で試してください:2つのターミナルを開き、一方でwork --daemonを実行し、もう一方でlistenを実行します。 workウィンドウは、listenよりもはるかに高速にジョブを実行します。

5
Simon Fredsted

Laravel 5.7現在、--stop-when-emptyコマンドに新しいオプションqueue:workが追加されています。このオプションを使用すると、現在のキューは空になるまで処理され、コマンド終了します。

ドキュメント によると:

--stop-when-emptyオプションを使用して、すべてのジョブを処理してから正常に終了するようにワーカーに指示できます。このオプションは、キューが空になった後にコンテナをシャットダウンする場合、Dockerコンテナ内のLaravel=

php artisan queue:work --stop-when-empty
0
PtrTon