Je configure mon serveur de travaux hors ligne. J'ai lu la documentation mais je ne vois toujours pas vraiment les différences entre les deux commandes: artisan queue:work --daemon
et artisan queue:listen
. Quelle commande dois-je utiliser pour exécuter mes démons?
Modifier la mise à jour le 2017-04-07:
Il existe maintenant trois façons d'exécuter votre file d'attente:
queue:work
- c'est le nouveau processus "démon" (l'indicateur n'est plus requis). Le cadre se déclenche "une fois" - puis continue à parcourir les tâches. Cela continuera indéfiniment. Il utilise moins de mémoire/cpu que queue:listen
car le framework reste en place tout le temps. Vous devez également vous rappeler d'utiliser queue:restart
pour forcer la file d'attente à mettre à jour les modifications de code que vous envoyez pendant l'application des correctifs.
queue:work --once
- cela lancera le framework, traitera une tâche, puis s'arrêtera. Utile pour les tests pendant le développement, etc.
queue:listen
- cela déclenchera le framework à chaque cycle, traitera une tâche, puis s'arrêtera complètement, puis redémarrera le framework, etc. et bouclera indéfiniment. Cela signifie que toute la mémoire/tous les processus sont libérés après le traitement de chaque travail. Si vous avez des fuites de mémoire avec queue:work
- essayez ceci.
Le --daemon
flag n'a plus d'effet sur ces commandes.
Réponse originale:
Deux problèmes différents sont répertoriés.
Il y a artisan queue:work
et artisan queue:listen
queue:work
supprimera simplement le travail suivant dans la file d'attente et ne traitera que ce travail. Il s'agit d'une commande "unique" qui reviendra à l'invite de commandes une fois la commande d'une file d'attente traitée.queue:listen
écoutera la file d'attente et continuera de traiter toutes les commandes de file d'attente qu'il reçoit. Cela continuera de fonctionner indéfiniment jusqu'à ce que vous l'arrêtiez.Dans Laravel> = 4.2 il y avait un --daemon
commande ajoutée. La façon dont cela fonctionne est simplement de continuer à exécuter les files d'attente directement, plutôt que de redémarrer l'intégralité du framework après le traitement de chaque file d'attente. Il s'agit d'une commande facultative qui de manière significative réduit les besoins en mémoire et en CPU de votre file d'attente.
Le point important avec le --daemon
commande est que lorsque vous mettez à niveau votre application, vous devez redémarrer spécifiquement votre file d'attente avec queue:restart
, sinon vous pourriez potentiellement obtenir toutes sortes d'erreurs étranges car votre file d'attente aurait toujours l'ancien code en mémoire.
Donc, pour répondre à votre question " Quelle commande dois-je utiliser pour exécuter mes démons? " - la réponse est presque toujours queue:work --daemon
Les choses ont changé mais cela n'a pas été mentionné dans le document
--daemon Run the worker in daemon mode (Deprecated)
maintenant par défaut php artisan queue:work
s'exécute en mode démon,
alors queue:work
poursuivre le traitement des travaux sans jamais redémarrer le framework
pour l'exécuter une fois la commande est,
php artisan queue:work --once
La différence la plus importante est que queue:work --daemon
ne redémarre pas le framework sur chaque job, mais queue:listen
fait. En fait, listen
démarre un tout nouveau processus Laravel pour chaque tâche).
Essayez par vous-même: ouvrez 2 terminaux et exécutez work --daemon
dans l'un et listen
dans l'autre. La fenêtre work
exécutera les tâches beaucoup plus rapidement que listen
.
À partir de Laravel 5.7 une nouvelle option --stop-when-empty
a été ajouté au queue:work
commande. Lorsque vous utilisez cette option, la file d'attente actuelle est traitée jusqu'à ce qu'elle soit vide, puis la commande se termine.
Selon la documentation :
L'option --stop-when-empty peut être utilisée pour demander au travailleur de traiter tous les travaux, puis de quitter correctement. Cette option peut être utile lorsque vous travaillez Laravel files d'attente dans un conteneur Docker si vous souhaitez arrêter le conteneur une fois la file d'attente vide:
php artisan queue:work --stop-when-empty