Cron-Debugger
Cron-Debugger
Verstehe und debugge Cron-Ausdrücke in Echtzeit. Mit Live-Übersetzung, den nächsten Ausführungszeiten, Presets, 20 praktischen Linux/Ubuntu-Skripten und Syntax-Erklärung.
Hinweis: Dieser Cron-Debugger unterstützt den Standard-5-Feld-Cron (Minute, Stunde, Tag, Monat, Wochentag) wie er in Linux, macOS und Unix verwendet wird. Alle Berechnungen erfolgen lokal in Ihrem Browser.
Inhaltsverzeichnis
Schnellübersicht
Auf dieser Seite findest du:
- Cron-Debugger: Interaktive Analyse von Cron-Ausdrücken
- Live-Übersetzung: Cron in verständlichen Text übersetzen
- Nächste Runs: Die nächsten 10 Ausführungszeiten
- 20 Linux/Ubuntu-Skripte: Fertige Skripte zum Kopieren mit Cron-Beispielen
- Syntax-Referenz: Alle Sonderzeichen erklärt
- Geschichte: Entwicklung von Cron seit 1975
- FAQ: Häufige Fragen zu Cron
1. Cron-Debugger
Gib einen Cron-Ausdruck ein oder wähle ein Preset – die Analyse erfolgt live.
Cron-Ausdruck analysieren
| Symbol | Bedeutung | Beispiel | Erklärung |
|---|---|---|---|
| * | Beliebig | * * * * * |
Jede Minute, jede Stunde, jeden Tag... |
| , | Liste | 1,15 * * * * |
Minute 1 und 15 |
| - | Bereich | 1-5 * * * * |
Minute 1 bis 5 |
| / | Schrittweite | */15 * * * * |
Alle 15 Minuten |
| L | Letzter Tag | 0 0 L * * |
Letzter Tag des Monats (nicht überall) |
| W | Wochentag | 0 0 15W * * |
Nächster Werktag zum 15. |
| # | n-ter Wochentag | 0 0 * * 1#2 |
Zweiter Montag im Monat |
Monatsnamen (Jan-Dez)
Statt Zahlen können auch 3-Buchstaben-Kürzel verwendet werden:
- JAN = Januar = 1
- FEB = Februar = 2
- MAR = März = 3
- ...
- DEC = Dezember = 12
Wochentage (0-7)
Zahlen ODER Kürzel für Wochentage:
- 0 oder 7 = Sonntag (SUN)
- 1 = Montag (MON)
- 2 = Dienstag (TUE)
- 3 = Mittwoch (WED)
- 4 = Donnerstag (THU)
- 5 = Freitag (FRI)
- 6 = Samstag (SAT)
Besondere Ausdrücke
Cron kennt einige Spezial-Ausdrücke:
- @reboot: Einmal beim Start
- @yearly / @annually: 0 0 1 1 *
- @monthly: 0 0 1 * *
- @weekly: 0 0 * * 0
- @daily / @midnight: 0 0 * * *
- @hourly: 0 * * * *
Häufige Stolperfallen
- Sonntag: 0 oder 7 (beide erlaubt)
- Tag vs. Wochentag: Bei gesetztem DOM UND DOW wird ODER verwendet
- Schrittweite: */5 = alle 5 Einheiten
- Pfad: Cron hat minimalen PATH – immer absolute Pfade
- Umgebung: Variablen wie $HOME fehlen oft
- Zeitzone: Serverzeit, nicht lokale Zeit!
- Wenn du Tag des Monats (DOM) UND Wochentag (DOW) setzt, werden sie ODER-verknüpft – nicht UND!
- Beispiel:
0 0 13 * 5läuft am 13. jeden Monats UND an jedem Freitag. - Für "Freitag der 13." brauchst du
0 0 13 * 5– aber es triggert auch an jedem 13. und jedem Freitag. - Lösung: Skript-seitige Prüfung oder spezielle Tools wie
systemd.timer.
2. Theorie – Cron einfach erklärt
Verstehe die Grundlagen von Cron – ohne Vorkenntnisse.
Was ist Cron?
Cron ist der Zeitplan-Dienst auf Unix/Linux-Systemen:
- Dämon: Läuft im Hintergrund
- Crontab: Konfigurationsdatei mit Jobs
- Syntax: 5 Zeitfelder + Befehl
- Vorteil: Zuverlässig, bewährt, überall verfügbar
Wozu Cron?
Cron automatisiert wiederkehrende Aufgaben:
- Backups: Täglich um 3:00
- Logrotation: Wöchentlich
- Updates: Monatlich
- Monitoring: Alle 5 Minuten
- Reports: Jeden Morgen um 8:00
- Cleanup: Temporäre Dateien löschen
Wie funktioniert Cron?
Der Cron-Daemon prüft jede Minute:
- Zeit-Check: Passt aktuelle Zeit zu einem Ausdruck?
- Ausführung: Befehl wird als Shell-Befehl gestartet
- Umgebung: Minimal – PATH, HOME gesetzt
- Logging: Standardmäßig per E-Mail oder /var/log/syslog
Tipps für Cron
- Absolute Pfade:
/usr/bin/python3stattpython3 - Logging: Output umleiten:
>> /var/log/job.log 2>&1 - Testen: Erst manuell ausführen, dann in Crontab
- Locking: flock verhindert parallele Ausführung
- Umgebung: Variablen explizit setzen
- Konfig testen:
crontab -l,crontab -e
Wussten Sie schon? Der Name "Cron" stammt vom griechischen Wort "chronos" (Zeit) – inspiriert durch den Unix-Befehl chronos aus den 1970ern. Der erste Cron-Daemon wurde 1975 von Brian Kernighan bei Bell Labs entwickelt. Ursprünglich hieß er cron und wurde von Ken Thompson in der 7. Edition von Unix eingeführt. Bis heute ist die grundlegende Syntax unverändert geblieben – eines der ältesten und stabilsten Konzepte in der IT. Alle modernen Systeme (macOS, alle Linux-Distributionen, BSD) nutzen Cron oder kompatible Varianten.
3. Cron-Syntax-Referenz
Die 5 Felder eines Cron-Ausdrucks und ihre Sonderzeichen im Überblick.
| Feld | Bereich | Sonderzeichen | Beispiel |
|---|---|---|---|
| Minute | 0-59 | * , - / |
*/5 = alle 5 Minuten |
| Stunde | 0-23 | * , - / |
9-17 = 9 bis 17 Uhr |
| Tag | 1-31 | * , - / |
1,15 = 1. und 15. |
| Monat | 1-12 | * , - / |
1-6 = Januar bis Juni |
| Wochentag | 0-7 (0,7=So) | * , - / |
1-5 = Montag bis Freitag |
* – Wildcard
Steht für "jeden möglichen Wert" im entsprechenden Feld.
Wird verwendet, wenn jede Minute, jede Stunde, etc. ausgeführt werden soll.
, – Liste
Mehrere Werte können mit Komma getrennt werden.
Ermöglicht die Ausführung zu bestimmten Zeitpunkten.
- – Bereich
Ein Bereich von Werten wird mit Bindestrich angegeben.
Ideal für Geschäftszeiten oder regelmäßige Intervalle.
/ – Schrittweite
Bestimmt, in welchem Intervall Werte ausgewählt werden.
Kombinierbar mit Bereichen: 0-30/5 = alle 5 Minuten in den ersten 30 Minuten.
4. 20 interessante Linux/Ubuntu-Skripte für Cronjobs
Praxisnahe Skripte zum Kopieren
Diese 20 Skripte sind fertige, produktionsreife Beispiele für typische System- und Wartungsaufgaben. Klicke auf "Skript kopieren" um den Bash-Code zu kopieren, oder auf "Cron übernehmen", um den Zeitplan direkt im Debugger zu testen.
5. Geschichte von Cron
Von Bell Labs bis zu modernen Timern – 50 Jahre Zeitplanung.
Erster Cron bei Bell Labs
Brian Kernighan entwickelt den ersten Cron-Daemon für Unix. Ziel: Regelmäßige Wartungsjobs (Backups, Logrotation) automatisch ausführen. Der Name kommt von "chronos" (griechisch: Zeit).
Version 7 Unix
Cron wird Teil der 7. Edition von Unix und damit Standard in allen Unix-Systemen. Die grundlegende 5-Feld-Syntax entsteht.
Paul Vixie
Paul Vixie entwickelt den Vixie Cron – die bis heute in Linux und BSD verwendete Version. Neue Features: Sekundengenauigkeit, bessere Logs, Benutzer-Crontabs.
Cron für alle
Cron wird in allen Unix-Derivaten Standard. BSD, Solaris, AIX, HP-UX – überall cron. Erste Unterschiede zwischen den Implementierungen entstehen.
systemd.timer
systemd führt Timer ein. Features: Sekundengenau, Persistent (verpasste Jobs nachholen), Ressourcen-Kontrolle. Wird von vielen Distributionen übernommen.
Cloud-Scheduler
AWS EventBridge, Google Cloud Scheduler, Azure Logic Apps – moderne Cloud-Äquivalente zu Cron. Mit Sekundengenauigkeit und fehlerfreier Ausführung.
Kubernetes CronJobs
Kubernetes CronJobs ermöglichen zeitgesteuerte Container-Ausführung. Standard in modernen Cloud-Infrastrukturen. Cron-Syntax bleibt bis heute unverändert.
6. FAQ – Spannende Fragen & Antworten
Häufige Fragen zu Cron
Die Position im Cron-Ausdruck bestimmt die Bedeutung:
Wichtig: Die ODER-Regel
Wenn du sowohl DOM (Tag des Monats) als auch DOW (Wochentag) setzt (nicht *), wird die Bedingung ODER-verknüpft:
Für "Freitag der 13." (nur wenn beides zutrifft):
- Mit Cron direkt nicht möglich
- Lösung 1: Skript-seitige Prüfung:
if [ $(date +%d) -eq 13 ] && [ $(date +%u) -eq 5 ]; then ... - Lösung 2:
systemd.timermitOnCalendar=Fri *-*-13 - Lösung 3: Jeden Freitag laufen lassen und im Skript prüfen
Best Practice: Setze nur DOM oder DOW, nicht beide – es sei denn, du willst genau dieses ODER-Verhalten.
Cron-Probleme haben fast immer eine dieser Ursachen:
1. PATH-Problem (häufigste Ursache)
- Cron hat einen minimalen PATH
- Nur
/usr/bin:/binmeist verfügbar - Lösung: Absolute Pfade verwenden
- Falsch:
python3 /opt/script.py - Richtig:
/usr/bin/python3 /opt/script.py
2. Umgebungsvariablen fehlen
- $HOME, $USER, $LANG sind oft nicht gesetzt
- Lösung: In der Crontab definieren
PATH=/usr/local/bin:/usr/bin:/binMAILTO=admin@example.com
3. Keine Ausführungsrechte
- Skript muss ausführbar sein:
chmod +x script.sh - Shebang prüfen:
#!/bin/bash
4. Logs prüfen!
5. Ausgabe umleiten
6. Weitere häufige Ursachen
- Crontab nicht geladen:
crontab -lprüfen - Syntax-Fehler:
crontab -ezeigt Fehler - Zeitzone: Server läuft in UTC, nicht lokal
- Doppelter Eintrag: Läuft 2× (z.B. in /etc/cron.d und crontab)
- SELinux/AppArmor: Blockiert Ausführung
Es gibt mehrere Wege, Crontab-Einträge zu bearbeiten:
1. Benutzer-Crontab (pro User)
2. System-Crontab
/etc/crontab– Hauptdatei (mit User-Feld!)/etc/cron.d/– Zusätzliche Jobs/etc/cron.hourly/– Stündliche Skripte/etc/cron.daily/– Tägliche Skripte/etc/cron.weekly/– Wöchentliche Skripte/etc/cron.monthly/– Monatliche Skripte
Unterschied /etc/crontab vs. crontab -e:
3. Crontab-Syntax prüfen
Beispielhafte Crontab
Beide haben ihre Berechtigung – hier die Unterschiede:
| Feature | Cron | systemd.timer |
|---|---|---|
| Verfügbarkeit | Alle Unix-Systeme | Nur systemd-Systeme |
| Syntax | Einfach (5 Felder) | Komplexer |
| Sekundengenau | ❌ Nein | ✅ Ja |
| Verpasste Jobs | ❌ Weg | ✅ Nachholen (Persistent) |
| Logging | E-Mail oder Syslog | Journal (systemctl) |
| Ressourcen-Limits | ❌ Nein | ✅ CPU, RAM, IO |
| Dependencies | ❌ Nein | ✅ Requires, After |
| Umgebung | Minimal | Konfigurierbar |
| Komplexität | Niedrig | Höher |
Beispiel systemd.timer:
Wann Cron?
- Einfache, wiederkehrende Jobs
- Kompatibilität mit alten Systemen
- Wenn du auf allen Systemen gleich arbeiten willst
- Schnelle Einrichtung
Wann systemd.timer?
- Sekundengenauigkeit benötigt
- Verpasste Jobs nachholen (z.B. Server war aus)
- Ressourcen-Limits erforderlich
- Komplexe Abhängigkeiten
- Bessere Integration mit systemd
Empfehlung: Moderne Systeme (systemd) → systemd.timer. Alte Systeme oder Container → Cron.
@reboot ist ein spezieller Cron-Ausdruck, der einen Job beim Systemstart ausführt:
Syntax:
Andere Spezial-Ausdrücke:
| Ausdruck | Entspricht | Bedeutung |
|---|---|---|
| @reboot | — | Beim Start |
| @yearly | 0 0 1 1 * | Jährlich (1. Jan, 0:00) |
| @annually | 0 0 1 1 * | Wie @yearly |
| @monthly | 0 0 1 * * | 1. jeden Monats, 0:00 |
| @weekly | 0 0 * * 0 | Sonntags, 0:00 |
| @daily | 0 0 * * * | Täglich, 0:00 |
| @midnight | 0 0 * * * | Wie @daily |
| @hourly | 0 * * * * | Stündlich (Minute 0) |
Anwendungsfälle für @reboot:
- Hintergrunddienste: Ohne systemd-Service starten
- Container-Setup: In Docker-Containern
- Persönliche Skripte: Nach Login oder Reboot
- Monitoring: Start einer Statusübertragung
Beispiel:
Wichtige Hinweise:
- Wird nur einmal beim Start ausgeführt
- Reihenfolge nicht garantiert (nicht warten auf Netzwerk)
- Besser für echte Dienste: systemd-Service mit After=network.target
- Bei Cron ohne Systemstart (Container): manchmal nicht ausgeführt
Ein systematischer Test ist die halbe Miete – so gehst du vor:
Schritt 1: Befehl manuell testen
Schritt 2: Umgebung simulieren
Schritt 3: Logging aktivieren
Schritt 4: Test mit kurzem Intervall
Schritt 5: Logs beobachten
Schritt 6: Exit-Code prüfen
Checkliste für Tests:
- Befehl funktioniert manuell ✓
- Absolute Pfade verwendet ✓
- Ausführungsrechte gesetzt ✓
- Umgebungsvariablen berücksichtigt ✓
- Output umgeleitet ✓
- Exit-Code geprüft ✓
- Logs überprüft ✓
Cron verwendet die Systemzeitzone des Servers – das ist oft eine böse Überraschung:
Warum ist das wichtig?
- Server in UTC: Cron läuft in UTC, nicht in lokaler Zeit
- Sommerzeit: Zeitumstellung kann Jobs doppelt oder gar nicht ausführen
- Container: Oft UTC als Standard
- Cloud: AWS, Azure, GCP – alles in UTC
Systemzeitzone prüfen:
Beispiel-Szenario:
Lösungsmöglichkeiten:
- Zeitzone anpassen:
timedatectl set-timezone Europe/Berlin - CRON_TZ verwenden:
CRON_TZ=Europe/Berlinin der Crontab - In UTC bleiben: Akzeptieren und Zeit entsprechend umrechnen
- Im Skript prüfen:
[ $(date +%H) -eq 3 ] || exit 0
CRON_TZ Beispiel:
Tipp für Server-Admins: Server immer in UTC betreiben und Jobs in UTC planen. Das vermeidet Zeitumstellungs-Probleme. In der Anzeige dann für Nutzer umrechnen.
Wenn ein Job länger dauert als sein Intervall, kann er doppelt starten – das ist oft problematisch:
Beispiel: Job läuft alle 5 Minuten, dauert aber 10 Minuten → 2 Instanzen parallel.
Lösung 1: flock (empfohlen)
-n: Kein Warten, sofort beenden wenn Lock gehalten- Lock-Datei wird automatisch verwaltet
- Standard auf allen Linux-Systemen
Lösung 2: PID-Datei
Lösung 3: systemd-Service
Lösung 4: Cron mit Sekunden-Check
Vergleich der Lösungen:
| Methode | Aufwand | Zuverlässigkeit |
|---|---|---|
| flock | Sehr gering | Sehr hoch |
| PID-Datei | Mittel | Hoch |
| systemd | Hoch | Sehr hoch |
| Timestamp-Check | Mittel | Mittel |
Empfehlung: flock ist die einfachste und zuverlässigste Lösung für Cron-Jobs.
Zusammenfassung
Die wichtigsten Punkte
- Cron-Syntax: 5 Felder: Min Std Tag Monat Wochentag
- Sonderzeichen: * (alle), , (Liste), - (Bereich), / (Schritt)
- ODER-Regel: DOM + DOW gesetzt = ODER-Verknüpfung
- PATH: Minimal in Cron → absolute Pfade verwenden
- Zeitzone: Serverzeit (oft UTC), nicht lokal!
- Logging: Output umleiten:
>> log 2>&1 - Locking: flock gegen parallele Ausführung
- Testen: Erst manuell, dann Cron
- Spezial: @reboot, @daily, @hourly etc.
- Unser Tool: Cron-Ausdrücke analysieren und visualisieren
Weitere Tools
Unix-Zeitstempel in lesbare Daten umwandeln und umgekehrt.
Zum ToolJSON formatieren, validieren und visualisieren.
Zum ToolStrukturierte Checklisten für Systemadministratoren.
Zum ToolErstelle Diagramme aus deinen Daten mit Live-Vorschau.
Zum Tool