Graceful Shutdown: Laufende Prozesse bei Server-Stop sauber beenden #80

Open
opened 2026-03-30 20:20:34 +00:00 by David · 0 comments
Collaborator

Beschreibung

Bei einem Server-Restart (docker restart, Deploy, Strg+C) werden laufende Claude-Prozesse und Pipeline-Tasks hart beendet. Es gibt kein Signal-Handling das laufende Arbeit sauber abschließt oder aufräumt.

Hintergrund

Beim harten Beenden bleiben Tickets im Status running hängen, Claude-Subprocesses werden zu Zombie-Prozessen, und temporäre Branch/kontext.md-Dateien bleiben liegen. Der Watchdog räumt erst nach 15 Minuten auf.

Akzeptanzkriterien

  • SIGTERM Handler registriert in backend/main.py
  • Bei Shutdown: Keine neuen Pipeline-Starts erlauben
  • Laufende Claude-Prozesse sauber beenden (SIGTERM → 30s Wartezeit → SIGKILL)
  • Ticket-Status auf interrupted setzen statt running zu lassen
  • Cleanup: kontext.md, temp-Branches aufräumen
  • Log: Welche Tasks beim Shutdown unterbrochen wurden

Technische Hinweise

  • Betroffene Dateien: backend/main.py, backend/services/pipeline.py, backend/services/claude_runner.py
  • Ansatz: signal.signal(SIGTERM, shutdown_handler) + asyncio.Event als Shutdown-Flag
  • Migration nötig: nein

Aufwand: M

## Beschreibung Bei einem Server-Restart (`docker restart`, Deploy, Strg+C) werden laufende Claude-Prozesse und Pipeline-Tasks hart beendet. Es gibt kein Signal-Handling das laufende Arbeit sauber abschließt oder aufräumt. ## Hintergrund Beim harten Beenden bleiben Tickets im Status `running` hängen, Claude-Subprocesses werden zu Zombie-Prozessen, und temporäre Branch/kontext.md-Dateien bleiben liegen. Der Watchdog räumt erst nach 15 Minuten auf. ## Akzeptanzkriterien - [ ] SIGTERM Handler registriert in `backend/main.py` - [ ] Bei Shutdown: Keine neuen Pipeline-Starts erlauben - [ ] Laufende Claude-Prozesse sauber beenden (SIGTERM → 30s Wartezeit → SIGKILL) - [ ] Ticket-Status auf `interrupted` setzen statt `running` zu lassen - [ ] Cleanup: kontext.md, temp-Branches aufräumen - [ ] Log: Welche Tasks beim Shutdown unterbrochen wurden ## Technische Hinweise - Betroffene Dateien: `backend/main.py`, `backend/services/pipeline.py`, `backend/services/claude_runner.py` - Ansatz: `signal.signal(SIGTERM, shutdown_handler)` + `asyncio.Event` als Shutdown-Flag - Migration nötig: nein ## Aufwand: M
Sign in to join this conversation.
No description provided.