open-how2 – Entdecke. Verstehe. Nutze.
Veröffentlicht am
How2-Tipps

Laravel Queue Worker als systemd-Dienst einrichten

Autor
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:

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:

  1. Erzeuge einen Test-Job:

    php artisan make:job TestWorkerJob
    
  2. Füge Log::info() oder eine Aktion in handle() ein.
  3. Dispatche den Job:

    php artisan tinker
    >>> dispatch(new App\Jobs\TestWorkerJob());
    
  4. 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:

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.