Problème : Maintenir les files d'attente Laravel actives
Les files d'attente Laravel aident à gérer les tâches en arrière-plan, mais elles peuvent s'arrêter de manière inattendue. Cela peut retarder le traitement des tâches et affecter les performances de votre application Laravel. Maintenir les workers de file d'attente en fonctionnement est un problème courant pour les développeurs Laravel.
Solutions pour un traitement persistant des files d'attente
Utilisation de la commande nohup
La commande nohup maintient les processus de file d'attente Laravel en cours d'exécution en arrière-plan, même après la fermeture d'une connexion SSH. Elle signifie "no hang up" et permet à un processus de continuer à s'exécuter après votre déconnexion.
Pour utiliser nohup avec la file d'attente Laravel, exécutez cette commande :
nohup php artisan queue:work --daemon &
Le "&" à la fin démarre le processus en arrière-plan, vous permettant d'utiliser le terminal.
Nohup écrit la sortie dans un fichier appelé nohup.out dans le répertoire courant. Vous pouvez rediriger la sortie vers un fichier différent ou la supprimer :
nohup php artisan queue:work --daemon > /dev/null 2>&1 &
Cette commande supprime à la fois la sortie standard et les messages d'erreur.
Conseil: Surveiller les processus nohup
Pour surveiller les processus nohup, utilisez la commande 'ps' :
ps aux | grep artisan
Cela liste tous les processus artisan en cours d'exécution, y compris ceux démarrés avec nohup.
Mise en place de Supervisor
Supervisor est un système de contrôle de processus pour les systèmes d'exploitation de type Unix. Il offre une solution pour gérer les workers de file d'attente Laravel.
Supervisor offre ces avantages pour la gestion des files d'attente Laravel :
- Redémarre les workers de file d'attente s'ils plantent
- Gère plusieurs workers de file d'attente
- Enregistre et surveille les processus
Pour configurer Supervisor pour les files d'attente Laravel :
- Installez Supervisor sur votre serveur
- Créez un fichier de configuration pour votre worker de file d'attente Laravel
- Mettez à jour la configuration de Supervisor
- Démarrez le processus Supervisor
Une configuration de base de Supervisor pour un worker de file d'attente Laravel pourrait ressembler à ceci :
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /chemin/vers/votre/projet/artisan queue:work
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/chemin/vers/votre/projet/worker.log
Cette configuration démarre 8 processus de worker de file d'attente et les redémarre s'ils s'arrêtent.
Exemple: Commandes Supervisor
Commandes courantes de Supervisor :
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
sudo supervisorctl stop laravel-worker:*
sudo supervisorctl restart laravel-worker:*
Ces commandes rechargent la configuration, démarrent, arrêtent et redémarrent les workers de file d'attente Laravel.