オフラインジョブサーバーを設定しています。ドキュメントを読みましたが、2つのコマンドの違いはまだわかりません:artisan queue:work --daemon
およびartisan queue:listen
。デーモンを実行するにはどのコマンドを使用する必要がありますか?
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:work
とartisan queue:listen
があります
queue:work
は、単にキュー内の次のジョブをポップオフし、その1つのジョブのみを処理します。これは、1つのキューコマンドが処理されるとコマンドプロンプトに戻る「1回限りの」コマンドです。queue:listen
はキューをリッスンし、受信したキューコマンドの処理を続行します。これは、停止するまで無期限に実行され続けます。Laravel> = 4.2に--daemon
コマンドが追加されました。動作方法は、すべてのキューが処理された後にフレームワーク全体を再起動するのではなく、キューを直接実行し続けることです。 (が大幅に(-===-)キューのメモリとCPU要件を削減するオプションのコマンドです。
--daemon
コマンドの重要な点は、アプリケーションをアップグレードするときに、queue:restart
でキューを明確に再起動する必要があることです。そうしないと、キューにはまださまざまな奇妙なエラーが発生する可能性がありますメモリ内の古いコード。
だからあなたの質問に答えるには、「デーモンを実行するためにどのコマンドを使うべきですか?」-答えはほとんど常にqueue:work --daemon
です
物事は変更されましたしかし、それは文書に記載されていません
--daemon Run the worker in daemon mode (Deprecated)
今ではデフォルトでphp artisan queue:work
はデーモンモードで実行され、
そう queue:work
フレームワークを再起動せずにジョブの処理を続行します
一度実行する場合コマンドは、
php artisan queue:work --once
最も重要な違いは、queue:work --daemon
は各jobでフレームワークを再起動せず、queue:listen
doesで再起動することです。実際、listen
は、各ジョブに対してまったく新しいLaravelプロセスを開始します。
自分で試してください:2つのターミナルを開き、一方でwork --daemon
を実行し、もう一方でlisten
を実行します。 work
ウィンドウは、listen
よりもはるかに高速にジョブを実行します。
Laravel 5.7現在、--stop-when-empty
コマンドに新しいオプションqueue:work
が追加されています。このオプションを使用すると、現在のキューは空になるまで処理され、コマンド終了します。
ドキュメント によると:
--stop-when-emptyオプションを使用して、すべてのジョブを処理してから正常に終了するようにワーカーに指示できます。このオプションは、キューが空になった後にコンテナをシャットダウンする場合、Dockerコンテナ内のLaravel=
php artisan queue:work --stop-when-empty