Comment garder le système de file d'attente Laravel en cours d'exécution sur le serveur
J'ai récemment mis en place un Laravel système de File d'attente. Les bases sont un cronjob appelle une commande qui ajoute des travaux de la file d'attente et les appels d'une deuxième commande qui envoie un e-mail.
Le système fonctionne lorsque je ssh sur mon serveur et exécutez php artisan de la file d'attente:écouter, mais si je ferme mon terminal de l'auditeur s'arrête et l'emploi de la pile en place et de s'asseoir dans la file d'attente jusqu'à ce que je ssh en arrière et écouter de nouveau.
Quel est le meilleur moyen de garder un système de file d'attente cours d'exécution en arrière-plan sans avoir besoin de garder ma connexion ouverte via ssh?
J'ai essayé de courir php artisan queue:work --daemon
et il a achevé les travaux dans la file d'attente, mais quand j'ai fermé mon terminal, il a fermé la connexion et le processus d'arrière-plan.
source d'informationauteur zeros-and-ones
Vous devez vous connecter pour publier un commentaire.
De course
Permettra d'éviter la commande de sortie lorsque vous vous déconnectez.
La fuite esperluette (&) provoque le démarrage du processus en arrière-plan, de sorte que vous pouvez continuer à utiliser le shell et n'avez pas à attendre jusqu'à ce que le script est terminé.
Voir nohup
Cela permettra d'informations de sortie pour un fichier intitulé nohup.dans le répertoire où vous exécutez la commande. Si vous n'avez pas intérêt à la sortie, vous pouvez rediriger la sortie standard stdout et stderr vers /dev/null, ou même vous pourriez sortie dans le cours normal de votre laravel journal. Par exemple
Mais vous devez également utiliser quelque chose comme Supervisord pour s'assurer que le service est en cours d'exécution et est redémarré après un plantage ou d'échec.
La commande
est la bonne, il serait de permettre au processus de se poursuivre après la fermeture de la connexion SSH; cependant, ce est seulement une solution rapide à court terme. Une fois que votre serveur est redémarré ou toute question qui provoque l'arrêt du processus, vous aurez besoin de revenir en arrière et exécutez de nouveau la commande. Lorsque cela se produit, vous ne savez jamais. Il peut arriver sur un vendredi soir, donc, il est préférable de mettre en œuvre une solution à long terme.
J'ai fini par passer à Supervisord, ce peut être installé sur Ubuntu aussi facile que
Pour AWS-AMI ou RedHat utilisateurs, vous pouvez suivre l'ensemble des instructions que j'ai présenté dans cette question:
La configuration de Supervisord sur une AWS IAM Serveur Linux
Vous devez utiliser linux superviseur
L'Installation est simple et sur Ubuntu je peux l'installer avec la commande suivante:
Superviseur fichiers de configuration se trouvent dans /etc/superviseur/conf.d annuaire.
Pour chaque processus, vous devez créer un nouveau processus dans le fichier de configuration. Avec cette configuration, l'auditeur va réessayer chaque tâche 3 fois. Également Superviseur de redémarrer écoute si elle échoue ou si le système redémarre.
Pour ceux qui sont déjà en cours d'exécution NodeJS sur leurs environnements de production. J'utilise PM2 pour gérer l'application des processus.
- Je utiliser Vagrant dans le développement et l'installation de NodeJS et de ce processus en utilisant seulement inline vagrant scripts.
Lorsque vous utilisez PM2 en développement, vous pouvez utiliser l'un des nombreux observateurs à gérer le redémarrage. Exécutez simplement
pm2 restart queue-worker
lorsque vous décrochez un changement. Dans la production, je ne recommande pas cette approche, plutôt opter pour un outil de construction qui peuvent suivre ce processus.Si vous commencez à l'écoute à l'intérieur d'un écran? Voir ici: http://aperiodic.net/screen/quick_reference
Alors même si vous vous déconnectez, l'écran serait toujours active et en cours d'exécution. Je ne sais pas pourquoi le daemonization ne fonctionne pas bien.
De https://gist.github.com/ivanvermeyen/b72061c5d70c61e86875
Vous pouvez utiliser monit outil. il est très petit et utile pour tout type de processus de gestion et de suivi.
Après le Téléchargement des paquets binaires à partir de ce lienvous pouvez l'extraire dans un dossier sur votre système, puis de copier les deux fichiers du paquet sur votre système pour l'installer:
Maintenant modifier
/etc/monitrc
sur base de vos besoins(document de référence). puis créer un initialisation du fichier de contrôle pour permettre monit au démarrage. maintenant commencer à monit comme ceci:À l'aide de pm2
J'avais JS script en cours d'exécution avec pm2 (Avancé, la production, le gestionnaire de processus pour Node.js) Qui était la seule que j'ai été en cours d'exécution. Mais maintenant que j'en ai un plus pour le garder en cours d'exécution.
J'ai créé
process.yml
d'exécuter à la fois avec une seule commande.De vérifier la première irait
php artisan queue: listen
Exécuter:
Vérifiez plus d'options et fonctionnalités de pm2