Cron-Debugger

ADMIN-TOOL

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.

Live-Vorschau Übersetzung Nächste Runs Presets 20 Skripte Dark Mode

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

0 * * * * Gültig
Übersetzung: Wird geladen...

Nächste 10 Ausführungen

Cron-Syntax Referenz
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
Sonderzeichen-Referenz

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
0 0 1 JAN * → 1. Januar um 0:00

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)
0 9 * * MON-FRI → Werktags um 9:00

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 * * * *
@daily /backup/script.sh

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!
/usr/bin/python3 /opt/script.py
Wichtig: Kein Monatsname mit DOW mischen
  • Wenn du Tag des Monats (DOM) UND Wochentag (DOW) setzt, werden sie ODER-verknüpft – nicht UND!
  • Beispiel: 0 0 13 * 5 lä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
0 3 * * * /usr/local/bin/backup.sh

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
Ohne Cron: Alles müsste manuell laufen

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
Sekundengenau? Nicht mit Cron! Minutengenau ist das Minimum.

Tipps für Cron

  • Absolute Pfade: /usr/bin/python3 statt python3
  • 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
0 3 * * * /usr/bin/flock -n /tmp/job.lock /opt/backup.sh

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.

* * * * * = jede Minute

Wird verwendet, wenn jede Minute, jede Stunde, etc. ausgeführt werden soll.

, – Liste

Mehrere Werte können mit Komma getrennt werden.

0 9,12,18 * * * = 9, 12 und 18 Uhr

Ermöglicht die Ausführung zu bestimmten Zeitpunkten.

- – Bereich

Ein Bereich von Werten wird mit Bindestrich angegeben.

0 9-17 * * * = jede Stunde von 9 bis 17 Uhr

Ideal für Geschäftszeiten oder regelmäßige Intervalle.

/ – Schrittweite

Bestimmt, in welchem Intervall Werte ausgewählt werden.

*/15 * * * * = alle 15 Minuten

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.

Alle 20 Backup 4 Monitoring 4 Wartung 4 Sicherheit 4 Sync 4

5. Geschichte von Cron

Von Bell Labs bis zu modernen Timern – 50 Jahre Zeitplanung.

1975

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).

1979

Version 7 Unix

Cron wird Teil der 7. Edition von Unix und damit Standard in allen Unix-Systemen. Die grundlegende 5-Feld-Syntax entsteht.

1987

Paul Vixie

Paul Vixie entwickelt den Vixie Cron – die bis heute in Linux und BSD verwendete Version. Neue Features: Sekundengenauigkeit, bessere Logs, Benutzer-Crontabs.

1990er

Cron für alle

Cron wird in allen Unix-Derivaten Standard. BSD, Solaris, AIX, HP-UX – überall cron. Erste Unterschiede zwischen den Implementierungen entstehen.

2010

systemd.timer

systemd führt Timer ein. Features: Sekundengenau, Persistent (verpasste Jobs nachholen), Ressourcen-Kontrolle. Wird von vielen Distributionen übernommen.

2015

Cloud-Scheduler

AWS EventBridge, Google Cloud Scheduler, Azure Logic Apps – moderne Cloud-Äquivalente zu Cron. Mit Sekundengenauigkeit und fehlerfreier Ausführung.

Heute

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

Wie unterscheide ich DOM und DOW bei Cron?

Die Position im Cron-Ausdruck bestimmt die Bedeutung:

* * * * * │ │ │ │ │ │ │ │ │ └── Wochentag (0-7, So=0 oder 7) │ │ │ └──── Monat (1-12) │ │ └────── Tag des Monats (1-31) │ └──────── Stunde (0-23) └────────── Minute (0-59)

Wichtig: Die ODER-Regel

Wenn du sowohl DOM (Tag des Monats) als auch DOW (Wochentag) setzt (nicht *), wird die Bedingung ODER-verknüpft:

0 0 13 * 5 # Läuft am 13. JEDEN Monats UND jeden Freitag # Nicht nur am Freitag den 13.!

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.timer mit OnCalendar=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.

Warum funktioniert mein Cron-Job nicht?

Cron-Probleme haben fast immer eine dieser Ursachen:

1. PATH-Problem (häufigste Ursache)

  • Cron hat einen minimalen PATH
  • Nur /usr/bin:/bin meist 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:/bin
  • MAILTO=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!

# Debian/Ubuntu: grep CRON /var/log/syslog # RHEL/CentOS: grep CRON /var/log/cron # macOS: log show --predicate 'process == "cron"' --last 1h

5. Ausgabe umleiten

0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1

6. Weitere häufige Ursachen

  • Crontab nicht geladen: crontab -l prüfen
  • Syntax-Fehler: crontab -e zeigt 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
Wie schreibe ich in die Crontab?

Es gibt mehrere Wege, Crontab-Einträge zu bearbeiten:

1. Benutzer-Crontab (pro User)

crontab -e # Eigene Crontab bearbeiten crontab -l # Eigene Crontab anzeigen crontab -r # Eigene Crontab löschen (Vorsicht!) crontab -u user -e # Crontab eines anderen Users (root)

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:

# /etc/crontab (System): 6 Felder 0 3 * * * root /opt/backup.sh ^^^^^-- User-Feld! # crontab -e (User): 5 Felder + Befehl 0 3 * * * /opt/backup.sh

3. Crontab-Syntax prüfen

# Nach dem Speichern wird die Datei geprüft crontab -l | tail -5 # Letzte 5 Jobs anzeigen # Crontab-Syntax-Check (falls verfügbar) crontab -T # Auf manchen Systemen

Beispielhafte Crontab

# Umgebungsvariablen PATH=/usr/local/bin:/usr/bin:/bin MAILTO=admin@example.com # Jobs 0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1 */5 * * * * /usr/bin/check-status.sh 0 9 * * 1-5 /opt/report.sh @reboot /opt/startup.sh
Cron vs. systemd.timer – was ist besser?

Beide haben ihre Berechtigung – hier die Unterschiede:

FeatureCronsystemd.timer
VerfügbarkeitAlle Unix-SystemeNur systemd-Systeme
SyntaxEinfach (5 Felder)Komplexer
Sekundengenau❌ Nein✅ Ja
Verpasste Jobs❌ Weg✅ Nachholen (Persistent)
LoggingE-Mail oder SyslogJournal (systemctl)
Ressourcen-Limits❌ Nein✅ CPU, RAM, IO
Dependencies❌ Nein✅ Requires, After
UmgebungMinimalKonfigurierbar
KomplexitätNiedrigHöher

Beispiel systemd.timer:

# /etc/systemd/system/backup.timer [Unit] Description=Backup Timer [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target # /etc/systemd/system/backup.service [Unit] Description=Backup Service [Service] Type=oneshot ExecStart=/opt/backup.sh User=backup

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.

Was bedeutet der @reboot-Trigger?

@reboot ist ein spezieller Cron-Ausdruck, der einen Job beim Systemstart ausführt:

Syntax:

@reboot /opt/startup.sh

Andere Spezial-Ausdrücke:

AusdruckEntsprichtBedeutung
@reboot—Beim Start
@yearly0 0 1 1 *Jährlich (1. Jan, 0:00)
@annually0 0 1 1 *Wie @yearly
@monthly0 0 1 * *1. jeden Monats, 0:00
@weekly0 0 * * 0Sonntags, 0:00
@daily0 0 * * *Täglich, 0:00
@midnight0 0 * * *Wie @daily
@hourly0 * * * *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:

@reboot /usr/bin/screen -dmS minecraft /opt/minecraft/start.sh @reboot /opt/vpn/connect.sh @reboot /usr/bin/python3 /opt/monitoring/agent.py &

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
Wie teste ich einen Cron-Job richtig?

Ein systematischer Test ist die halbe Miete – so gehst du vor:

Schritt 1: Befehl manuell testen

# Erst den Befehl so ausführen, wie Cron es machen würde: cd / env -i PATH=/usr/bin:/bin /opt/backup.sh # Wenn hier Fehler auftreten, tauchen sie auch in Cron auf!

Schritt 2: Umgebung simulieren

# Leere Umgebung simulieren: env -i /bin/bash -c "/opt/backup.sh" # Mit minimalem PATH: env -i PATH=/usr/bin:/bin HOME=/root /opt/backup.sh

Schritt 3: Logging aktivieren

# In der Crontab: 0 3 * * * /opt/backup.sh >> /var/log/backup-$(date +\%Y\%m\%d).log 2>&1

Schritt 4: Test mit kurzem Intervall

# Nicht: 0 3 * * * (musst bis 3 Uhr warten) # Sondern: */2 * * * * (alle 2 Minuten zum Test) */2 * * * * /opt/backup.sh >> /var/log/backup-test.log 2>&1

Schritt 5: Logs beobachten

# Cron-eigene Logs: tail -f /var/log/syslog | grep CRON tail -f /var/log/cron # Skript-Logs: tail -f /var/log/backup-test.log

Schritt 6: Exit-Code prüfen

# Der Exit-Code wird in den Logs angezeigt: grep "backup" /var/log/syslog # Wenn "exit status 1" → Fehler!

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 ✓
Welche Zeitzone verwendet Cron?

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:

# Zeitzone anzeigen: timedatectl # Oder: cat /etc/timezone # Debian/Ubuntu ls -l /etc/localtime # Symlink auf Zone # Datum/Zeit prüfen: date

Beispiel-Szenario:

# Server läuft in UTC # Cron-Job: 0 3 * * * # Serverzeit: 3:00 UTC # Lokale Zeit (Berlin, Winter): 4:00 # Lokale Zeit (Berlin, Sommer): 5:00 # Der Job läuft NICHT um 3:00 lokaler Zeit!

Lösungsmöglichkeiten:

  • Zeitzone anpassen: timedatectl set-timezone Europe/Berlin
  • CRON_TZ verwenden: CRON_TZ=Europe/Berlin in der Crontab
  • In UTC bleiben: Akzeptieren und Zeit entsprechend umrechnen
  • Im Skript prüfen: [ $(date +%H) -eq 3 ] || exit 0

CRON_TZ Beispiel:

# In der Crontab: CRON_TZ=Europe/Berlin # Ab hier alles in Berliner Zeit: 0 3 * * * /opt/backup.sh

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.

Wie verhindere ich, dass ein Job doppelt läuft?

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)

*/5 * * * * /usr/bin/flock -n /tmp/backup.lock /opt/backup.sh
  • -n: Kein Warten, sofort beenden wenn Lock gehalten
  • Lock-Datei wird automatisch verwaltet
  • Standard auf allen Linux-Systemen

Lösung 2: PID-Datei

#!/bin/bash PIDFILE=/var/run/backup.pid # Prüfen ob bereits läuft if [ -f $PIDFILE ] && kill -0 $(cat $PIDFILE) 2>/dev/null; then echo "Backup läuft bereits" exit 1 fi # PID speichern echo $$ > $PIDFILE trap "rm -f $PIDFILE" EXIT # Eigentlicher Job /opt/backup.sh

Lösung 3: systemd-Service

# Service: /etc/systemd/system/backup.service [Service] Type=oneshot ExecStart=/opt/backup.sh # Timer: /etc/systemd/system/backup.timer [Timer] OnCalendar=*/5 * * * * Persistent=true # systemd verhindert Doppelstart automatisch! # Aktivieren: systemctl enable backup.timer systemctl start backup.timer

Lösung 4: Cron mit Sekunden-Check

# Nur starten, wenn der letzte Lauf länger her ist: */5 * * * * /opt/check-and-run.sh # In check-and-run.sh: LAST=$(stat -c %Y /var/run/backup.lock) NOW=$(date +%s) if [ $((NOW - LAST)) -lt 300 ]; then exit 0; fi touch /var/run/backup.lock /opt/backup.sh

Vergleich der Lösungen:

MethodeAufwandZuverlässigkeit
flockSehr geringSehr hoch
PID-DateiMittelHoch
systemdHochSehr hoch
Timestamp-CheckMittelMittel

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

Timestamp Converter

Unix-Zeitstempel in lesbare Daten umwandeln und umgekehrt.

Zum Tool
JSON Editor

JSON formatieren, validieren und visualisieren.

Zum Tool
Admin To-Do-Liste

Strukturierte Checklisten für Systemadministratoren.

Zum Tool
Datenvisualisierung

Erstelle Diagramme aus deinen Daten mit Live-Vorschau.

Zum Tool