Zeitplanung & Fehlerbehandlung
Führe Python-Skripte automatisch nach Zeitplan aus und mach sie produktionsreif — mit Fehlerbehandlung, Logging, Retry-Logik und Monitoring.
🔄 Kurzer Rückblick: In der letzten Lektion hast du E-Mail- und Benachrichtigungsversand automatisiert — Reports und Alerts aus deinen Skripten verschicken. Jetzt sorgen wir dafür, dass deine Skripte automatisch nach Zeitplan laufen und Fehler elegant überstehen.
Ein Skript, das funktioniert wenn du es manuell aufrufst, ist ein Tool. Ein Skript, das nach Zeitplan läuft, Fehler behandelt und dich bei Problemen benachrichtigt, ist ein Automatisierungssystem. Diese Lektion schließt die Lücke.
Zeitplanungs-Optionen
| Tool | Plattform | Ideal für |
|---|---|---|
| cron | macOS/Linux | Einfach, zuverlässig, vorinstalliert |
| Aufgabenplanung | Windows | Windows-native Planung |
| schedule (Python-Library) | Alle Plattformen | Lesbare Zeitpläne in Python-Code |
| APScheduler | Alle Plattformen | Fortgeschrittene Planung mit Persistenz |
| launchd | macOS | macOS-spezifisch, mehr Features als cron |
| systemd Timer | Linux | Moderner cron-Ersatz mit Logging |
Option 1: cron (macOS/Linux)
KI-Prompt:
Generiere cron-Ausdrücke für diese Zeitpläne: (1) Jeden Werktag um 8 Uhr, (2) Jeden Montag um 9 Uhr, (3) Alle 6 Stunden, (4) Erster Tag jedes Monats um Mitternacht. Zeig den vollständigen Crontab-Eintrag mit vollem Pfad zu python3 und Skript, Ausgabe in Logdatei umleiten.
Häufige cron-Muster:
| Zeitplan | Cron-Ausdruck |
|---|---|
| Täglich um 8 Uhr | 0 8 * * * |
| Werktags um 8 Uhr | 0 8 * * 1-5 |
| Jeden Montag um 9 Uhr | 0 9 * * 1 |
| Alle 6 Stunden | 0 */6 * * * |
| Monatserster um Mitternacht | 0 0 1 * * |
Crontab-Eintrag:
# Crontab bearbeiten
crontab -e
# Format: Minute Stunde Tag Monat Wochentag Befehl
0 8 * * 1-5 /usr/bin/python3 /home/user/scripts/daily_report.py >> /home/user/logs/daily_report.log 2>&1
Option 2: Python schedule-Library
pip install schedule
KI-Prompt:
Schreib ein Python-Scheduler-Skript mit der schedule-Library: (1) daily_report() jeden Werktag um 8 Uhr, (2) weekly_summary() jeden Freitag um 17 Uhr, (3) price_check() alle 6 Stunden, (4) Loggen wann jeder Task startet und endet, (5) Fehler abfangen und loggen ohne den Scheduler zu crashen, (6) Alert senden wenn ein Task fehlschlägt. Scheduler dauerhaft laufen lassen.
Produktionsreife Fehlerbehandlung
Die Fehlerbehandlungs-Hierarchie:
| Ebene | Behandelt | Beispiel |
|---|---|---|
| try/except pro Operation | Einzelne Fehler | Eine Datei schlägt fehl, andere laufen weiter |
| Retry mit Backoff | Temporäre Fehler | Netzwerk-Timeout → Retry nach 30s |
| Fehler-Benachrichtigung | Erschöpfte Retries | Mail-Alert: „Skript nach 3 Versuchen fehlgeschlagen" |
| Heartbeat-Monitoring | Stille Fehler | „Skript hat bis 8:15 keinen Erfolg gemeldet" |
KI-Prompt für robuste Fehlerbehandlung:
Füge produktionsreife Fehlerbehandlung zu meinem Automatisierungsskript hinzu: (1) Jede Hauptoperation in try/except mit spezifischen Exception-Typen (kein bloßes except), (2) Retry-Logik für Netzwerk-Operationen: 3 Versuche mit exponentiellem Backoff (30s, 60s, 120s), (3) Alle Fehler mit vollem Traceback in rotierende Logdatei (max 10MB, 5 Rotationen behalten), (4) Bei komplettem Fehlschlag Alert-Mail mit Fehlerdetails, (5) Bei Erfolg Heartbeat-Datei mit Zeitstempel schreiben.
Logging einrichten
KI-Prompt:
Richte Python-Logging für mein Automatisierungsskript ein: (1) Auf Konsole und in Datei loggen, (2) Konsole zeigt INFO aufwärts, Datei zeigt DEBUG aufwärts, (3) Format mit Zeitstempel, Level, Funktionsname und Nachricht, (4) Logdateien täglich rotieren, 30 Tage aufheben, (5) Wiederverwendbare setup_logging()-Funktion zum Importieren.
Log-Level-Richtlinien:
| Level | Wofür | Beispiel |
|---|---|---|
| DEBUG | Detaillierte Fehlersuche | „Verarbeite Zeile 142 von 5.000" |
| INFO | Normale Meilensteine | „Report erstellt: 500 Zeilen, gespeichert als output.xlsx" |
| WARNING | Unerwartetes, aber behandelt | „3 Zeilen ohne E-Mail, mit Standard gefüllt" |
| ERROR | Operation fehlgeschlagen, Skript läuft weiter | „Seite 15 nicht abrufbar, überspringe" |
| CRITICAL | Skript kann nicht fortfahren | „Datenbankverbindung nach 3 Versuchen fehlgeschlagen" |
✅ Quick Check: Dein Skript benutzt ein blankes
except:das ALLE Exceptions fängt, auch KeyboardInterrupt und SystemExit. Warum ist das ein Problem? (Antwort: Blankesexcept:fängt ALLES, auch Exceptions die das Skript stoppen sollten: KeyboardInterrupt (Strg+C), SystemExit (sys.exit()), MemoryError. Das macht es unmöglich, das Skript sauber zu beenden. Immer spezifische Exceptions fangen:except (requests.RequestException, ValueError) as e:— oder mindestensexcept Exception as e:was KeyboardInterrupt und SystemExit ausschließt.)
Monitoring deiner Automatisierungen
KI-Prompt für Heartbeat-Monitoring:
Schreib ein Monitoring-Skript das prüft ob meine Automatisierungsskripte erfolgreich gelaufen sind: (1) Jedes Skript schreibt nach Erfolg eine Heartbeat-Datei: {skript_name}_heartbeat.json mit {“letzter_erfolg”: zeitstempel, “verarbeitete_datensaetze”: anzahl}, (2) Der Monitor prüft alle Heartbeat-Dateien und alarmiert wenn der letzte Erfolg eines Skripts älter als sein erwarteter Zeitplan ist (tägliche Skripte → Alert nach > 25 Stunden, stündliche Skripte → Alert nach > 90 Minuten), (3) Tägliche Statuszusammenfassung: welche Skripte liefen, wann, wie viele Datensätze, Fehler. Monitor alle 30 Minuten ausführen.
Key Takeaways
- Produktionsautomatisierung braucht drei Schutzschichten: Retry-Logik für temporäre Fehler (Netzwerk-Timeouts lösen sich von selbst), Fehler-Benachrichtigung bei erschöpften Retries (du erfährst sofort von Problemen) und Heartbeat-Monitoring für stille Fehler (Skript ist gar nicht gelaufen) — ohne alle drei entdeckst du Ausfälle Stunden oder Tage zu spät
- Pythons logging-Modul statt print() für Automatisierungsskripte nutzen — logging liefert Zeitstempel, Schweregrade, Datei-Ausgabe und Rotation, genau das was du brauchst um 3-Uhr-morgens-Fehler zu debuggen; das Setup dauert 5 Zeilen und spart Stunden an Fehlersuche
- Zeitplanung und Fehlerbehandlung zentralisieren wenn deine Automatisierung wächst — ein Scheduler-Skript mit konsistentem Logging, Retries und Alerts über alle Tasks ist wartbarer als fünf unabhängige Skripte mit jeweils eigenem Ad-hoc-Fehlerhandling
Up Next
In der letzten Lektion baust du dein persönliches Automatisierungs-Toolkit — die wertvollsten Automatisierungsmöglichkeiten identifizieren, dein Skript-Portfolio aufbauen und eine Wartungsroutine etablieren.
Wissenscheck
Erst das Quiz oben abschließen
Lektion abgeschlossen!