> ## Documentation Index
> Fetch the complete documentation index at: https://docs.varios-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# systemd-Dienst

> VARIOS AI Update-Helfer (varios.sh) als systemd-Service einrichten und betreiben

Für On-Premise-Installationen stellt VARIOS AI das Skript `varios.sh` bereit. Es überwacht im Hintergrund die Datei `update_version` und führt bei einer neuen Zielversion automatisch ein Update durch (Docker-Images ziehen, Container neu starten, Migrations-Skripte ausführen).

Damit der Update-Helfer nach einem Neustart des Servers zuverlässig startet, können Sie ihn als **systemd-Service** registrieren.

<Note>
  Docker muss installiert und startbar sein. `After=docker.service` legt die Start-Reihenfolge fest; `Wants=docker.service` startet Docker beim Start dieses Services mit — auch wenn Docker nicht für den Autostart aktiviert ist. Für Server-Neustarts empfehlen wir zusätzlich `systemctl enable docker.service`. Der Service führt `varios.sh --daemon` direkt aus — die Ausgabe landet in **journald**, nicht in `varios.log`.
</Note>

***

## Service-Datei

Passen Sie `WorkingDirectory` an das Verzeichnis an, in dem `varios.sh` liegt:

```ini varios-update.service theme={null}
[Unit]
Description=Start varios.sh
After=docker.service
Wants=docker.service

[Service]
Type=simple
ExecStart=/bin/sh ./varios.sh --daemon
WorkingDirectory=/docker/varios/

[Install]
WantedBy=multi-user.target
```

***

## Einrichtung

<Steps>
  <Step title="WorkingDirectory anpassen">
    Setzen Sie `WorkingDirectory` in `varios-update.service` auf den absoluten Pfad zum VARIOS-Installationsverzeichnis mit `varios.sh`, `docker-compose.yml` und `.env` (z. B. `/docker/varios/`).
  </Step>

  <Step title="Service-Datei installieren und systemd neu laden">
    ```bash theme={null}
    cp varios-update.service /etc/systemd/system/
    systemctl daemon-reload
    ```

    <Warning>
      Ohne `daemon-reload` erkennt systemd die neue Service-Datei nicht — `enable` oder `start` schlagen dann fehl.
    </Warning>
  </Step>

  <Step title="Service aktivieren und starten">
    ```bash theme={null}
    systemctl enable --now varios-update.service
    ```
  </Step>

  <Step title="Einrichtung prüfen">
    ```bash theme={null}
    systemctl status varios-update.service
    ```

    Der Status sollte `active (running)` anzeigen.

    <Check>
      Logs live mitlesen: `journalctl -u varios-update.service -f`
    </Check>
  </Step>
</Steps>

***

## Betrieb

Steuern Sie den Helfer **ausschließlich über systemd** — nicht über `./varios.sh --stop`. Der systemd-Service startet `varios.sh --daemon` direkt im Vordergrund und legt dabei **keine** `varios.pid` an. `./varios.sh --stop` greift daher nur, wenn der Helfer zuvor manuell ohne systemd gestartet wurde.

```bash theme={null}
# Status prüfen
systemctl status varios-update.service

# Update-Überwachung stoppen (z. B. vor Wartungsarbeiten)
systemctl stop varios-update.service

# Update-Überwachung wieder starten
systemctl start varios-update.service

# Autostart deaktivieren (Service bleibt bis zum nächsten Stopp aktiv)
systemctl disable varios-update.service
```

<Warning>
  `systemctl stop` beendet die Update-**Überwachung**. Laufende `docker compose`-Befehle innerhalb eines Updates können dabei unterbrochen werden, weil systemd den Service-Prozess und seine Kindprozesse beendet (`KillMode=control-group`).
</Warning>

***

## Logs und Fehlersuche

| Quelle                    | Befehl                                                 | Inhalt                                  |
| ------------------------- | ------------------------------------------------------ | --------------------------------------- |
| systemd (primär)          | `journalctl -u varios-update.service -f`               | Update-Prüfungen, Update-Ablauf, Fehler |
| systemd (letzte Einträge) | `journalctl -u varios-update.service -n 50 --no-pager` | Kürzliche Historie für die Fehlersuche  |

`varios.log` und `varios.pid` werden nur erzeugt, wenn Sie `./varios.sh` **ohne** systemd manuell starten — nicht bei Betrieb über diesen Service.

### Typische Prüfschritte

<AccordionGroup>
  <Accordion title="Service startet nicht">
    * Läuft Docker? `systemctl status docker.service`
    * Stimmt `WorkingDirectory` mit dem Installationsverzeichnis überein?
    * Wurde nach dem Kopieren der Service-Datei `systemctl daemon-reload` ausgeführt?
    * Details: `journalctl -u varios-update.service -n 50 --no-pager`
  </Accordion>

  <Accordion title="Service läuft, aber kein Update">
    * Enthält `.env` die aktuelle `VERSION=`?
    * Liegt in `update_version` eine abweichende Zielversion?
    * Protokoll prüfen: `journalctl -u varios-update.service -f`
  </Accordion>

  <Accordion title="Helfer läuft doppelt">
    * Prüfen, ob zusätzlich ein manuell gestarteter Helfer läuft: `pgrep -af varios.sh`
    * Manuell gestarteten Helfer beenden: `./varios.sh --stop` (nur wenn `varios.pid` existiert)
    * systemd-gesteuerten Helfer beenden: `systemctl stop varios-update.service`
  </Accordion>
</AccordionGroup>
