Come mantenere la Laravel Queue in esecuzione in background?

Pubblicato 17 ottobre 2024

Problema: Mantenere Attive Le Code Laravel

Le code Laravel aiutano a gestire le attività in background, ma possono smettere di funzionare inaspettatamente. Ciò può ritardare l'elaborazione dei lavori e influire sulle prestazioni dell'applicazione Laravel. Mantenere i worker delle code in esecuzione è un problema comune per gli sviluppatori Laravel.

Soluzioni per L'Elaborazione Persistente Delle Code

Utilizzo del Comando nohup

Il comando nohup mantiene i processi delle code Laravel in esecuzione in background, anche dopo la chiusura di una connessione SSH. Significa "no hang up" e permette a un processo di continuare a funzionare dopo il logout.

Per utilizzare nohup con la coda Laravel, esegui questo comando:

nohup php artisan queue:work --daemon &

Il "&" alla fine avvia il processo in background, permettendoti di utilizzare il terminale.

Nohup scrive l'output in un file chiamato nohup.out nella directory corrente. Puoi reindirizzare l'output su un file diverso o scartarlo:

nohup php artisan queue:work --daemon > /dev/null 2>&1 &

Questo comando scarta sia l'output standard che i messaggi di errore.

Suggerimento: Monitorare i processi nohup

Per monitorare i processi nohup, usa il comando 'ps':

ps aux | grep artisan

Questo elenca tutti i processi artisan in esecuzione, inclusi quelli avviati con nohup.

Implementazione di Supervisor

Supervisor è un sistema di controllo dei processi per sistemi operativi simili a Unix. Offre una soluzione per la gestione dei worker delle code Laravel.

Supervisor offre questi vantaggi per la gestione delle code Laravel:

  • Riavvia i worker delle code in caso di crash
  • Gestisce più worker delle code
  • Registra e monitora i processi

Per configurare Supervisor per le code Laravel:

  1. Installa Supervisor sul tuo server
  2. Crea un file di configurazione per il tuo worker della coda Laravel
  3. Aggiorna la configurazione di Supervisor
  4. Avvia il processo Supervisor

Una configurazione base di Supervisor per un worker della coda Laravel potrebbe apparire così:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/project/artisan queue:work
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/project/worker.log

Questa configurazione avvia 8 processi worker della coda e li riavvia se si fermano.

Esempio: Comandi Supervisor

Comandi comuni di Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
sudo supervisorctl stop laravel-worker:*
sudo supervisorctl restart laravel-worker:*

Questi comandi ricaricano la configurazione, avviano, fermano e riavviano i worker della coda Laravel.