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:
@@ -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
|
||||
Reference in New Issue
Block a user