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