# systemd-Override für mission-control-2.service

## Zweck

Diese Override-Datei sorgt dafür, dass `mission-control-2.service` **automatisch neu startet**, selbst wenn der Dienst durch `stop-sigterm` (normales Stoppen mit SIGTERM) beendet wird.

Ohne diesen Override:
- `Restart=on-failure` startet nur bei non-zero Exit-Codes neu.
- Bei `stop-sigterm`-Timeout (Prozess beendet sich nicht innerhalb von `TimeoutStopSec`) bleibt der Dienst tot.

Mit diesem Override:
- `Restart=always` startet nach **jeder** Beendigung (SIGTERM, SIGKILL, Crash, etc.) neu.
- `TimeoutStopSec=10` gibt dem Prozess 10 Sekunden für sauberes Herunterfahren, dann wird SIGKILL gesendet.
- `RestartSec=5` verhindert Flackern durch kurze Pause vor dem Neustart.

## Installation

```bash
# Override-Verzeichnis erstellen
mkdir -p ~/.config/systemd/user/mission-control-2.service.d/

# Datei kopieren
cp ~/mission-control-v2/deploy/mission-control-2.service.d/override.conf ~/.config/systemd/user/mission-control-2.service.d/

# Systemd neu laden
systemctl --user daemon-reload

# Dienst neu starten (Override wird jetzt aktiv)
systemctl --user restart mission-control-2

# Status prüfen
systemctl --user status mission-control-2
```

## Diagnose

### Überprüfen, ob Override aktiv ist

```bash
systemctl --user cat mission-control-2 | grep -A 10 "\[Service\]"
```

Erwartete Ausgabe (Override wird **nach** der Haupt-Unit geladen):

```
# /home/hitonabi/.config/systemd/user/mission-control-2.service
[Unit]
Description=Mission Control 2.0 (Cockpit)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
WorkingDirectory=%h/mission-control-v2/backend
ExecStart=%h/mission-control-v2/backend/.venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 9001
Environment=PYTHONPATH=%h/mission-control-v2
Environment=MC_PORT=9001
Environment=MC_LLAMA_SWAP_URL=http://127.0.0.1:8080
Environment=MC_CONFIG_PATH=/etc/llama-swap/config.yaml
Environment=MC_MODELS_DIR=/srv/models
Environment=MC_MEMORY_DB=/srv/models/mission-control-memory.db
Restart=on-failure
RestartSec=3

# /home/hitonabi/.config/systemd/user/mission-control-2.service.d/override.conf
[Service]
Restart=always
TimeoutStopSec=10
RestartSec=5
```

### Testen des Restart-Verhaltens

**Vorsicht**: Der Dienst wird neu gestartet.

```bash
# SIGTERM senden (sollte sofort neu starten)
systemctl --user kill mission-control-2 -s SIGTERM

# Status prüfen (sollte „active (running)“ zeigen)
systemctl --user status mission-control-2 --wait
```

### Log-Ausgabe nach Restart

```bash
# Letzte Logs anzeigen (auch nach Restart)
journalctl --user -u mission-control-2 -f
```

## Fehlerbehandlung

### Dienst startet nicht mehr nach Override

1. Override temporär deaktivieren:
   ```bash
   mv ~/.config/systemd/user/mission-control-2.service.d/override.conf{,.bak}
   systemctl --user daemon-reload
   systemctl --user restart mission-control-2
   ```

2. Log prüfen:
   ```bash
   journalctl --user -u mission-control-2 -n 100 --no-pager
   ```

3. Wenn `Restart=always` zu häufigem Neustart führt:
   - `RestartSec` erhöhen (z. B. auf 30)
   - `StartLimitIntervalSec` und `StartLimitBurst` setzen (z. B. `StartLimitIntervalSec=60`, `StartLimitBurst=3`)

### Diagnose-Skript

```bash
#!/bin/bash
# Diagnose-Script für mission-control-2 Restart-Verhalten

echo "=== mission-control-2 Restart-Konfiguration ==="

echo "Aktueller Restart-Modus:"
systemctl --user show mission-control-2 | grep -E "^Restart=|^RestartSec=|^TimeoutStopSec="

echo ""
echo "Override-Datei existiert?"
if [[ -f ~/.config/systemd/user/mission-control-2.service.d/override.conf ]]; then
  echo "Ja"
  echo "Override-Inhalt:"
  cat ~/.config/systemd/user/mission-control-2.service.d/override.conf
else
  echo "Nein"
fi
```

## Hinweise

- Diese Override-Datei ersetzt die `Restart=on-failure`-Einstellung in der Haupt-Unit.
- Die Override-Datei ist **nicht** Bestandteil des Live-Checkouts `~/mission-control-v2`.
- Nach jedem `deploy.sh`-Lauf muss der Override manuell wiederhergestellt werden, da `deploy.sh` den Live-Checkout resettet.
