feature/mc2-restart-sigterm: systemd-Override für automatischen Neustart bei stop-sigterm

- Override-Datei mit Restart=always, TimeoutStopSec=10, RestartSec=5
- README mit Installations- und Diagnoseanleitung
- Ziel: MC2 läuft auch nach SIGTERM-Timeout weiter
This commit is contained in:
hitonabi
2026-07-14 03:55:48 +02:00
parent 85a744ac7b
commit b99a9fe7d4
2 changed files with 159 additions and 0 deletions
@@ -0,0 +1,137 @@
# 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.
@@ -0,0 +1,22 @@
# systemd-Override für mission-control-2.service
# Ziel: Automatischer Neustart auch bei stop-sigterm Timeout
#
# Verwendung:
# 1. Kopieren nach ~/.config/systemd/user/mission-control-2.service.d/override.conf
# 2. systemctl --user daemon-reload
# 3. systemctl --user restart mission-control-2
#
# Verhaltensänderungen:
# - Restart=always → startet nach BEENDUNG (auch SIGTERM) automatisch neu
# - TimeoutStopSec=10 → gibt dem Prozess 10s für sauberes Stoppen, dann SIGKILL
# - RestartSec=5 → kurze Pause vor Neustart (verhindert Flackern bei sofortigem Crash)
[Service]
# Startet nach jedem Beendigung (auch SIGTERM, SIGSEGV, etc.) neu
Restart=always
# Zeitlimit für SIGTERM-Phase vor SIGKILL
TimeoutStopSec=10
# Wartezeit zwischen Beendigung und Neustart
RestartSec=5