Projektarbeit-MYP/backend/docs/STRG_C_SHUTDOWN.md

3.4 KiB

w# STRG+C Sofort-Shutdown Dokumentation

Übersicht

Das System verfügt über einen aggressiven Signal-Handler, der bei Strg+C (SIGINT) die Datenbank sofort schließt und das Programm um jeden Preis beendet.

Funktionalität

Ausgelöste Signale

  • SIGINT (Strg+C) - Hauptsignal für sofortiges Shutdown
  • SIGTERM - Terminate Signal
  • SIGBREAK (Windows) - Strg+Break unter Windows
  • SIGHUP (Unix/Linux) - Hangup Signal

Shutdown-Ablauf

  1. Sofortiger Datenbank-Cleanup

    • Schließt alle Scoped Sessions (_scoped_session.remove())
    • Disposed die SQLAlchemy Engine (_engine.dispose())
    • Führt Garbage Collection aus für verwaiste Sessions
  2. SQLite WAL-Synchronisation

    • Führt PRAGMA wal_checkpoint(TRUNCATE) aus
    • Stellt sicher, dass alle Änderungen in die Hauptdatenbank geschrieben werden
  3. Queue Manager Stop

    • Stoppt den Queue Manager falls verfügbar
    • Verhindert weitere Verarbeitung
  4. Sofortiger Exit

    • Verwendet os._exit(0) für sofortiges Beenden
    • Überspringt alle Python-Cleanup-Routinen

Konfiguration

Der Signal-Handler wird automatisch beim Anwendungsstart registriert:

# Automatische Registrierung in app.py
register_aggressive_shutdown()

Ausgabe-Beispiel

🚨 STRG+C ERKANNT - SOFORTIGES SHUTDOWN!
🔥 Schließe Datenbank sofort und beende Programm um jeden Preis!
✅ Scoped Sessions geschlossen
✅ Datenbank-Engine geschlossen
✅ Garbage Collection ausgeführt
✅ SQLite WAL-Checkpoint ausgeführt
✅ Queue Manager gestoppt
🛑 SOFORTIGES PROGRAMM-ENDE - EXIT CODE 0

Sicherheitsaspekte

  • Robuste Fehlerbehandlung: Jeder Schritt ist in try-catch-Blöcke eingebettet
  • Zeitlose Beendigung: os._exit(0) garantiert sofortiges Beenden
  • Datenintegrität: WAL-Checkpoint stellt sicher, dass Daten gesichert werden
  • Plattformübergreifend: Funktioniert auf Windows und Unix/Linux-Systemen

Implementierungsdetails

Signal-Handler-Funktion

def aggressive_shutdown_handler(sig, frame):
    # Sofortiges Datenbank-Cleanup
    # SQLite WAL-Synchronisation  
    # Queue Manager Stop
    # os._exit(0)

Registrierung

def register_aggressive_shutdown():
    signal.signal(signal.SIGINT, aggressive_shutdown_handler)
    signal.signal(signal.SIGTERM, aggressive_shutdown_handler)
    # Plattformspezifische Signale...

Fehlerbehebung

Häufige Probleme

  1. WAL-Checkpoint fehlgeschlagen

    • Datenbank eventuell gesperrt
    • Timeout von 1 Sekunde verhindert Aufhängen
  2. Queue Manager nicht verfügbar

    • Normal beim Start vor vollständiger Initialisierung
    • Wird ignoriert und geloggt
  3. Engine bereits geschlossen

    • Normal bei mehrfachen Shutdown-Aufrufen
    • Wird graceful behandelt

Best Practices

  • Nie deaktivieren: Der Handler sollte immer aktiv bleiben
  • Kein Override: Andere Signal-Handler sollten diesen nicht überschreiben
  • Testing: In Entwicklungsumgebung mit Debug-Modus testen

Kompatibilität

  • Windows 10/11
  • Ubuntu/Debian Linux
  • macOS (Unix-basiert)
  • Python 3.7+
  • SQLite mit WAL-Modus

Datum der Implementierung

Implementiert am: 2025-01-06 Version: 1.0 Entwickler: AI Assistant

Rechtliche Hinweise

Dieses Feature entspricht den Anforderungen für sofortiges System-Shutdown bei kritischen Situationen. Alle Daten werden ordnungsgemäß gesichert bevor das System beendet wird.