Hoe Laravel Queue Op De Achtergrond Draaiende Houden?

Gepubliceerd 16 augustus 2024

Probleem: Laravel Queues actief houden

Laravel queues helpen bij het beheren van achtergrondtaken, maar ze kunnen onverwacht stoppen met draaien. Dit kan de verwerking van jobs vertragen en de prestaties van je Laravel-applicatie beïnvloeden. Het draaiend houden van queue workers is een veelvoorkomend probleem voor Laravel-ontwikkelaars.

Oplossingen voor permanente Queue-verwerking

De nohup-opdracht gebruiken

De nohup-opdracht houdt Laravel queue-processen draaiend op de achtergrond, zelfs na het sluiten van een SSH-verbinding. Het betekent "no hang up" en stelt een proces in staat om te blijven draaien nadat je uitlogt.

Om nohup te gebruiken met Laravel queue, voer je deze opdracht uit:

nohup php artisan queue:work --daemon &

De "&" aan het einde start het proces op de achtergrond, zodat je de terminal kunt blijven gebruiken.

Nohup schrijft uitvoer naar een bestand genaamd nohup.out in de huidige directory. Je kunt de uitvoer omleiden naar een ander bestand of het weggooien:

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

Deze opdracht gooit zowel standaarduitvoer als foutmeldingen weg.

Tip: Monitor nohup-processen

Om nohup-processen te monitoren, gebruik je de 'ps'-opdracht:

ps aux | grep artisan

Dit toont alle draaiende artisan-processen, inclusief die gestart zijn met nohup.

Supervisor implementeren

Supervisor is een procesbeheersysteem voor Unix-achtige besturingssystemen. Het biedt een oplossing voor het beheren van Laravel queue workers.

Supervisor biedt deze voordelen voor Laravel queue-beheer:

  • Herstart queue workers als ze crashen
  • Beheert meerdere queue workers
  • Logt en monitort processen

Om Supervisor in te stellen voor Laravel queues:

  1. Installeer Supervisor op je server
  2. Maak een configuratiebestand voor je Laravel queue worker
  3. Update de Supervisor-configuratie
  4. Start het Supervisor-proces

Een basisconfiguratie van Supervisor voor een Laravel queue worker kan er zo uitzien:

[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

Deze configuratie start 8 queue worker-processen en herstart ze als ze stoppen.

Example: Supervisor-opdrachten

Veelgebruikte Supervisor-opdrachten:

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

Deze opdrachten laden de configuratie opnieuw, starten, stoppen en herstarten de Laravel queue workers.