Lektion 7 12 Min.

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

ToolPlattformIdeal für
cronmacOS/LinuxEinfach, zuverlässig, vorinstalliert
AufgabenplanungWindowsWindows-native Planung
schedule (Python-Library)Alle PlattformenLesbare Zeitpläne in Python-Code
APSchedulerAlle PlattformenFortgeschrittene Planung mit Persistenz
launchdmacOSmacOS-spezifisch, mehr Features als cron
systemd TimerLinuxModerner 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:

ZeitplanCron-Ausdruck
Täglich um 8 Uhr0 8 * * *
Werktags um 8 Uhr0 8 * * 1-5
Jeden Montag um 9 Uhr0 9 * * 1
Alle 6 Stunden0 */6 * * *
Monatserster um Mitternacht0 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:

EbeneBehandeltBeispiel
try/except pro OperationEinzelne FehlerEine Datei schlägt fehl, andere laufen weiter
Retry mit BackoffTemporäre FehlerNetzwerk-Timeout → Retry nach 30s
Fehler-BenachrichtigungErschöpfte RetriesMail-Alert: „Skript nach 3 Versuchen fehlgeschlagen"
Heartbeat-MonitoringStille 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:

LevelWofürBeispiel
DEBUGDetaillierte Fehlersuche„Verarbeite Zeile 142 von 5.000"
INFONormale Meilensteine„Report erstellt: 500 Zeilen, gespeichert als output.xlsx"
WARNINGUnerwartetes, aber behandelt„3 Zeilen ohne E-Mail, mit Standard gefüllt"
ERROROperation fehlgeschlagen, Skript läuft weiter„Seite 15 nicht abrufbar, überspringe"
CRITICALSkript 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: Blankes except: 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 mindestens except 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

1. Dein Skript läuft jeden Morgen um 8 Uhr per Cron. Eines Tages schlägt es fehl, weil die Ziel-Website vorübergehend down ist (503 Error). Das Skript loggt den Fehler und beendet sich. Du merkst es erst um 15 Uhr, weil du nicht in die Logs geschaut hast. Wie verhinderst du das?

2. Dein Automatisierungsskript nutzt print()-Anweisungen für Fortschritt und Fehler. Ein Kollege sagt, du sollst Pythons logging-Modul nutzen. Ist das ein echter Unterschied oder nur Stilsache?

3. Du hast 5 Automatisierungsskripte mit verschiedenen Zeitplänen. Du verwaltest sie mit 5 separaten Cron-Einträgen. Das wird unübersichtlich. Besserer Ansatz?

Beantworte alle Fragen zum Prüfen

Erst das Quiz oben abschließen

Passende Skills