Problem: Laravel-Warteschlangen aktiv halten
Laravel-Warteschlangen helfen bei der Verwaltung von Hintergrundaufgaben, können aber unerwartet stoppen. Dies kann die Verarbeitung von Jobs verzögern und die Leistung Ihrer Laravel-Anwendung beeinträchtigen. Die Aufrechterhaltung laufender Warteschlangen-Worker ist ein häufiges Problem für Laravel-Entwickler.
Lösungen für eine dauerhafte Warteschlangenverarbeitung
Verwendung des nohup-Befehls
Der nohup-Befehl hält Laravel-Warteschlangenprozesse im Hintergrund am Laufen, selbst nach dem Schließen einer SSH-Verbindung. Er bedeutet "no hang up" und ermöglicht es einem Prozess, nach dem Ausloggen weiterzulaufen.
Um nohup mit der Laravel-Warteschlange zu verwenden, führen Sie diesen Befehl aus:
nohup php artisan queue:work --daemon &
Das "&" am Ende startet den Prozess im Hintergrund und ermöglicht Ihnen die weitere Nutzung des Terminals.
Nohup schreibt die Ausgabe in eine Datei namens nohup.out im aktuellen Verzeichnis. Sie können die Ausgabe in eine andere Datei umleiten oder verwerfen:
nohup php artisan queue:work --daemon > /dev/null 2>&1 &
Dieser Befehl verwirft sowohl die Standardausgabe als auch Fehlermeldungen.
Tipp: nohup-Prozesse überwachen
Um nohup-Prozesse zu überwachen, verwenden Sie den 'ps'-Befehl:
ps aux | grep artisan
Dies listet alle laufenden Artisan-Prozesse auf, einschließlich derjenigen, die mit nohup gestartet wurden.
Implementierung von Supervisor
Supervisor ist ein Prozesssteuerungssystem für Unix-ähnliche Betriebssysteme. Es bietet eine Lösung zur Verwaltung von Laravel-Warteschlangen-Workern.
Supervisor bietet folgende Vorteile für das Laravel-Warteschlangenmanagement:
- Startet Warteschlangen-Worker neu, wenn sie abstürzen
- Verwaltet mehrere Warteschlangen-Worker
- Protokolliert und überwacht Prozesse
So richten Sie Supervisor für Laravel-Warteschlangen ein:
- Installieren Sie Supervisor auf Ihrem Server
- Erstellen Sie eine Konfigurationsdatei für Ihren Laravel-Warteschlangen-Worker
- Aktualisieren Sie die Supervisor-Konfiguration
- Starten Sie den Supervisor-Prozess
Eine grundlegende Supervisor-Konfiguration für einen Laravel-Warteschlangen-Worker könnte so aussehen:
[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
Diese Konfiguration startet 8 Warteschlangen-Worker-Prozesse und startet sie neu, wenn sie stoppen.
Beispiel: Supervisor-Befehle
Gängige Supervisor-Befehle:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
sudo supervisorctl stop laravel-worker:*
sudo supervisorctl restart laravel-worker:*
Diese Befehle laden die Konfiguration neu, starten, stoppen und starten die Laravel-Warteschlangen-Worker neu.