How2-Tipps

Laravel Queue Worker als systemd-Dienst einrichten

Lerne, wie du in wenigen Schritten einen Laravel Queue Worker mit systemd als stabilen Hintergrunddienst einrichtest – inklusive Beispieldatei, Statusprüfung und Logging.

1 min Lesezeit
Laravel Queue Worker als systemd-Dienst einrichten

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:

  1. Erzeuge einen Test-Job:

``bash php artisan make:job TestWorkerJob ``

  1. Füge Log::info() oder eine Aktion in handle() ein.
  2. Dispatche den Job:

``bash php artisan tinker >>> dispatch(new App\Jobs\TestWorkerJob()); ``

  1. Beobachte journalctl oder storage/logs/laravel.log, ob der Job verarbeitet wird.

Sicherheit und Rechte

Stelle sicher:

  • www-data (oder der gewählte User) hat Schreibrechte auf storage/ und bootstrap/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:

``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.