- Veröffentlicht am
- • How2-Tipps
Laravel Queue Worker als systemd-Dienst einrichten
- Autor
-
-
- Benutzer
- tmueller
- Beiträge dieses Autors
- Beiträge dieses Autors
-

Laravel-Queues ermöglichen das verzögerte Ausführen zeitintensiver Aufgaben (wie das Versenden von E-Mails oder die Verarbeitung von Dateien). Damit diese Jobs kontinuierlich im Hintergrund abgearbeitet werden, empfiehlt es sich, den Laravel-Worker als systemd-Dienst zu betreiben – stabil, zuverlässig und automatisch startend beim Systemboot.
Voraussetzungen
Bevor du loslegst, solltest du sicherstellen, dass folgende Voraussetzungen erfüllt sind:
- Ein funktionierendes Laravel-Projekt, z. B. in
/opt/w4m/webplatform
- PHP ist auf dem System installiert (überprüfbar mit
which php
) - Laravel-Jobs funktionieren im manuellen Test (z. B.
php artisan queue:work
) - Dein System nutzt
systemd
(gilt für nahezu alle modernen Linux-Distributionen)
Schritt 1: systemd-Service-Datei erstellen
Erstelle eine neue Datei für den Worker-Dienst:
sudo nano /etc/systemd/system/laravel-worker.service
Füge folgenden Inhalt ein (Pfad ggf. anpassen):
[Unit]
Description=Laravel Queue Worker
After=network.target
[Service]
User=www-data
Group=www-data
Restart=on-failure
WorkingDirectory=/var/www/laravel
ExecStart=/usr/bin/php artisan queue:work --sleep=3 --tries=3 --timeout=90
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Erläuterung der wichtigsten Parameter:
Parameter | Beschreibung |
---|---|
User /Group |
Der Benutzer, unter dem der Worker läuft (z. B. www-data ) |
WorkingDirectory |
Das Hauptverzeichnis deines Laravel-Projekts |
ExecStart |
Der Artisan-Befehl, der den Worker startet |
Restart=on-failure |
Startet den Worker automatisch neu bei Fehlern |
StandardOutput / StandardError |
Leitet Ausgaben in das journalctl -Systemlog um |
Schritt 2: systemd neu laden und Dienst aktivieren
Nach dem Erstellen der Datei müssen die systemd-Konfigurationen neu eingelesen und der Dienst aktiviert werden:
sudo systemctl daemon-reload
sudo systemctl enable laravel-worker.service
sudo systemctl start laravel-worker.service
Schritt 3: Status und Logs prüfen
Du kannst jederzeit den Status des Workers prüfen mit:
sudo systemctl status laravel-worker.service
Und die Logs live verfolgen:
sudo journalctl -u laravel-worker.service -f
Schritt 4: Testen
Um sicherzustellen, dass der Worker korrekt funktioniert:
Erzeuge einen Test-Job:
php artisan make:job TestWorkerJob
- Füge
Log::info()
oder eine Aktion inhandle()
ein. Dispatche den Job:
php artisan tinker >>> dispatch(new App\Jobs\TestWorkerJob());
- Beobachte
journalctl
oderstorage/logs/laravel.log
, ob der Job verarbeitet wird.
Sicherheit und Rechte
Stelle sicher:
www-data
(oder der gewählte User) hat Schreibrechte aufstorage/
undbootstrap/cache/
.env
ist vollständig konfiguriert (QUEUE_CONNECTION usw.)- Redis/MySQL/Beanstalk etc. läuft wie erwartet (je nach Queue-Treiber)
Optional: Log-Datei statt journal
Wenn du lieber eine eigene Logdatei nutzen willst, ersetze im Service:
StandardOutput=append:/var/www/laravel/storage/logs/worker.log
StandardError=append:/var/www/laravel/storage/logs/worker.log
Neustart bei Änderungen
Wenn du Änderungen an der .service
-Datei vornimmst:
sudo systemctl daemon-reload
sudo systemctl restart laravel-worker.service
Fazit
Mit systemd
betreibst du deinen Laravel-Queue-Worker stabil im Hintergrund – ohne separate Tools wie Supervisor. Durch die Integration in das Linux-System startest du deine Worker automatisch mit dem Server und kannst deren Status sauber verwalten.
Robust, wartungsarm, produktionssicher.