# Queue-Worker und Daemons mit Supervisor betreiben

> Halte Queue-Worker und andere dauerhaft laufende Prozesse mit Supervisor am Leben. Füge Prozesse hinzu, sieh den Live-Status, starte sie neu und lies ihr Log.

Auf der Seite **Prozesse** eines Servers verwaltest du dauerhaft laufende Prozesse unter Supervisor. Ein Prozess ist ein Befehl, der die ganze Zeit laufen soll, etwa ein Laravel-Queue-Worker, Horizon, Reverb oder ein Node.js-Server. Supervisor startet ihn beim Hochfahren des Servers und startet ihn erneut, wenn er stoppt oder abstürzt. Auf dieser Seite fügst du Prozesse hinzu, siehst, ob sie laufen, stoppst, startest oder startest sie neu und liest ihre Ausgabe.

Die Seite gibt es auf App-Servern, Webservern und Worker-Servern.

![Die Seite Prozesse mit einem Queue-Worker, der zwei Prozesse ausführt](https://ops.vimonto.com/docs-media/de/server-processes.webp?v=161e760d "Prozesse unter Supervisor")

## Einen Prozess hinzufügen

![Einen Queue-Worker auf der Seite Prozesse hinzufügen](https://ops.vimonto.com/docs-media/de/add-process.mp4?v=161e760d)

1. Öffne den Server und wähle in der Seitenleiste **Prozesse**.
2. Klicke auf **Prozess hinzufügen**.
3. Fülle das Formular aus (die Felder sind unten erklärt).
4. Klicke auf **Hinzufügen**.

Vimonto Deploy schreibt ein Supervisor-Programm für den Prozess, startet ihn und wartet, bis er läuft. Währenddessen zeigt die Zeile **Wird hinzugefügt**, danach den Live-Status.

| Feld | Standard | Bedeutung |
| --- | --- | --- |
| **Name** | | Ein Name, an dem du den Prozess erkennst, etwa „Queue-Worker“. Höchstens 60 Zeichen. |
| **Befehl** | | Der auszuführende Befehl in einer Zeile, etwa `php artisan queue:work --sleep=3 --tries=3`. Pipes und Variablen funktionieren wie eingegeben. |
| **Verzeichnis** | das Home-Verzeichnis des Benutzers | Wo der Befehl startet: ein vollständiger Pfad, etwa `/home/vimonto/example.com/current`. |
| **Ausführen als** | der Systembenutzer | Der Systembenutzer (standardmäßig `vimonto`) oder `root`. |
| **Prozesse** | 1 | Wie viele Kopien des Befehls parallel laufen, von 1 bis 64. |
| **Startzeit (s)** | 1 | Wie lange er laufen muss, um als gestartet zu gelten. Ein Prozess, der früher endet, gilt als fehlgeschlagener Start. |
| **Stoppzeit (s)** | 15 | Wie lange auf ein sauberes Beenden gewartet wird, bevor der Prozess abgeschossen wird. |
| **Stoppsignal** | TERM | Das Signal zum Stoppen des Prozesses: TERM, HUP, INT, QUIT, KILL, USR1 oder USR2. |

> [!TIP]
> Setze bei einem Laravel-Queue-Worker **Stoppzeit (s)** etwas länger als deinen längsten Job, damit ein Worker den laufenden Job beenden kann, bevor er gestoppt wird. Laravel-Worker beenden sich bei TERM sauber.

### Beispiel: ein Laravel-Queue-Worker

| Feld | Wert |
| --- | --- |
| **Name** | Queue-Worker |
| **Befehl** | `php artisan queue:work redis --sleep=3 --tries=3 --max-time=3600` |
| **Verzeichnis** | `/home/vimonto/example.com/current` |
| **Ausführen als** | `vimonto` |
| **Prozesse** | 2 |

Verwende das Verzeichnis `current` einer Site, nicht ein bestimmtes Release, damit der Worker immer den Code ausführt, der live ist. Bei einer [isolierten Site](https://ops.vimonto.com/docs/de/sites/create-a-site) gehören die Dateien dem eigenen Benutzer der Site; füge ihre Worker auf der [Queue-Seite](https://ops.vimonto.com/docs/de/sites/queues-and-scheduler) der Site hinzu, die sie unter dem richtigen Benutzer ausführt.

## Was bedeuten die Status?

Der Status kommt direkt von Supervisor. Er wird beim Öffnen der Seite abgerufen; klicke auf **Status aktualisieren**, um ihn erneut abzurufen. Nachdem du einen Prozess hinzugefügt, geändert, gestoppt, gestartet oder neu gestartet hast, ruft die Seite ihn danach von selbst ab.

| Status | Bedeutung |
| --- | --- |
| **Läuft** | Alle Prozesse laufen. |
| **Startet** | Supervisor startet den Prozess und wartet, bis die Startzeit verstrichen ist. |
| **Wird gestoppt** | Der Prozess hat sein Stoppsignal erhalten und fährt herunter. |
| **Gestoppt** | Der Prozess wurde gestoppt und läuft nicht. |
| **Fehlgeschlagen** | Mindestens ein Prozess hat sich beendet, konnte nicht starten oder stürzt immer wieder ab. Öffne das **Log**, um den Grund zu sehen. |
| **Unbekannt** | Supervisor kennt den Prozess nicht, zum Beispiel weil er von Hand entfernt wurde. |

Laufen nur einige Kopien, zeigt der Status eine Anzahl, etwa **Läuft 1/2**.

## Einen Prozess stoppen, starten und neu starten

Verwende die Schaltflächen in der Zeile des Prozesses:

- **Stoppen** stoppt alle Kopien des Prozesses, bis du ihn wieder startest. Ein Neustart des Servers startet ihn wieder.
- **Starten** erscheint, sobald ein Prozess gestoppt ist, und startet ihn wieder.
- **Neu starten** stoppt und startet alle Kopien, etwa um neuen Code oder eine geänderte `.env` zu laden.

Jede Aktion läuft als Job, den du auf der Seite [Aktivität](https://ops.vimonto.com/docs/de/organization/activity) verfolgen kannst. Pro Prozess läuft jeweils nur eine dieser Aktionen.

> [!NOTE]
> Queue-Worker von Sites werden nach jedem Deployment neu gestartet, damit sie den neuen Code laden. **Neu starten** brauchst du nur nach Änderungen außerhalb eines Deployments.

## Das Log lesen

Klicke auf **Log**, um die letzten 300 Zeilen der Ausgabe des Prozesses zu sehen (Standardausgabe und Fehler zusammen), beim Klicken vom Server abgerufen. Supervisor schreibt die Ausgabe nach `/var/log/vimonto/daemon-{id}.log` und behält bis zu 10 MB pro Datei, mit drei älteren Dateien.

## Einen Prozess bearbeiten

Öffne das Aktionsmenü (**⋯**) und wähle **Bearbeiten**. Ändere die Felder und klicke auf **Speichern**. Vimonto Deploy schreibt das Supervisor-Programm neu und startet den Prozess mit den neuen Einstellungen neu.

Schlägt das Hinzufügen oder Ändern eines Prozesses fehl, zeigt die Zeile **Fehlgeschlagen**; öffne das Aktionsmenü und wähle **Erneut versuchen**.

## Einen Prozess entfernen

Öffne das Aktionsmenü (**⋯**), wähle **Entfernen** und bestätige mit **Prozess entfernen**. Der Prozess wird gestoppt, sein Supervisor-Programm und sein Log werden gelöscht, und er startet nicht mehr.

## Wie Prozesse mit Sites zusammenhängen

Die Seite **Prozesse** zeigt alle Supervisor-Prozesse auf dem Server, auch die, die zu Sites gehören:

- **Queue-Worker**, die du auf der Seite [Queues und Scheduler](https://ops.vimonto.com/docs/de/sites/queues-and-scheduler) einer Site hinzufügst. Diese Seite bietet ein Formular speziell für Laravel-Worker (Verbindung, Queue, Timeout, Versuche, Speicher) und baut den Befehl für dich.
- **Prozesse von Site-Features**, etwa Horizon, Reverb, Pulse oder Inertia SSR, die ein [Site-Feature](https://ops.vimonto.com/docs/de/sites/site-features) anlegt, wenn du es einschaltest.

Diese Prozesse erscheinen hier mit ihrem Status, ihrem **Log** und den Schaltflächen **Stoppen**, **Starten** und **Neu starten**. Prozesse eines Site-Features tragen ein Badge **Über …**, etwa **Über Horizon**, und haben hier kein Aktionsmenü: Ändere sie über das Feature im Site-Header und schalte das Feature aus, um sie zu entfernen. Einen Worker, den du selbst hinzugefügt hast, änderst oder entfernst du auf der Seite der Site oder hier.

## Häufig gestellte Fragen

### Was ist der Unterschied zwischen einem Prozess und einem geplanten Job?

Ein Prozess läuft die ganze Zeit und wird neu gestartet, wenn er stoppt. Ein [geplanter Job](https://ops.vimonto.com/docs/de/servers/scheduler) führt einen Befehl zu festen Zeiten aus, etwa jede Minute oder jede Nacht, und beendet sich dann.

### Mein Prozess zeigt immer wieder Fehlgeschlagen. Was sollte ich prüfen?

Öffne das **Log**. Häufige Ursachen sind ein falsches **Verzeichnis**, ein Befehl, der nicht gefunden wird, weil er einen vollständigen Pfad braucht, ein fehlender Wert in der `.env` oder ein Befehl, der sich sofort beendet, statt im Vordergrund zu laufen. Supervisor braucht einen Befehl, der weiterläuft; starte ihn nicht mit `&` oder einer Option `--daemon` im Hintergrund.

### Sollte ein Prozess als root laufen?

Selten. Führe Prozesse als Systembenutzer aus, außer der Befehl braucht wirklich root. So kann ein Fehler in deiner Anwendung nicht den Rest des Servers verändern.

### Kann ich eine Node.js-Anwendung als Prozess ausführen?

Ja. Verwende einen Befehl wie `npm run start` oder `node server.js` mit dem Verzeichnis der Anwendung. Bei einer Node.js-Site richtet die eigene Seite **Prozesse** der Site das für dich ein.
