b99a9fe7d4
- Override-Datei mit Restart=always, TimeoutStopSec=10, RestartSec=5 - README mit Installations- und Diagnoseanleitung - Ziel: MC2 läuft auch nach SIGTERM-Timeout weiter
138 lines
4.0 KiB
Markdown
138 lines
4.0 KiB
Markdown
# 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.
|