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