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:
``bash sudo nano /etc/systemd/system/laravel-worker.service ``
Füge folgenden Inhalt ein (Pfad ggf. anpassen):
```ini [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:
``bash 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:
``bash sudo systemctl status laravel-worker.service ``
Und die Logs live verfolgen:
``bash sudo journalctl -u laravel-worker.service -f ``
Schritt 4: Testen
Um sicherzustellen, dass der Worker korrekt funktioniert:
- Erzeuge einen Test-Job:
``bash php artisan make:job TestWorkerJob ``
- Füge
Log::info()oder eine Aktion inhandle()ein. - Dispatche den Job:
``bash php artisan tinker >>> dispatch(new App\Jobs\TestWorkerJob()); ``
- Beobachte
journalctloderstorage/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/.envist 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:
``ini 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:
``bash 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.