Files
mission-control-v2/deploy/mission-control-2.service.d
hitonabi b99a9fe7d4 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
2026-07-14 03:55:48 +02:00
..

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

# 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

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.

# 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

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

    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:

    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

#!/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.