cron parse schedule cron-expression

Cron-Ausdrücke meistern: Der ultimative Online-Cron-Parser

Dekodieren Sie komplexe Cron-Jobs ganz einfach mit unserem Online-Cron-Parser. Erhalten Sie sofort menschenlesbare Zeitpläne und die nächsten Ausführungszeiten.

Was ist Cron? — Die Geschichte

Cron ist eines der ältesten und langlebigsten Werkzeuge der Unix-Welt. Es wurde von Ken Thompson als Teil von Unix V7 (1979) in den Bell Labs entwickelt. Der Name „cron" leitet sich vom griechischen Wort chronos (χρόνος) für „Zeit" ab.

Der ursprüngliche Cron-Daemon wachte jede Minute auf, scannte eine Liste geplanter Aufgaben und führte alle aus, deren Zeit gekommen war. Dieses elegante Design — eine Tabelle aus Zeitausdrücken gepaart mit Befehlen — erwies sich als so effektiv, dass es zum De-facto-Standard für die Aufgabenplanung auf allen Unix-ähnlichen Systemen wurde. Moderne Linux-Distributionen verwenden Nachfolger wie Vixie Cron (Paul Vixie, 1988), cronie und fcron, während macOS launchd verwendet. Crons Einfluss erstreckte sich auch auf Anwendungs-Frameworks: Quartz Scheduler (Java), APScheduler (Python), node-cron (Node.js) und Cloud-Plattformen wie AWS EventBridge übernehmen alle seine Ausdruckssyntax.


Standard-5-Feld-Cron-Syntax

Ein Standard-Cron-Ausdruck besteht aus fünf Feldern, die durch Leerzeichen getrennt sind:

┌───────── Minute        (0–59)
│ ┌─────── Stunde        (0–23)
│ │ ┌───── Tag des Monats (1–31)
│ │ │ ┌─── Monat         (1–12 oder JAN–DEC)
│ │ │ │ ┌─ Wochentag     (0–7 oder SUN–SAT; 0 und 7 = Sonntag)
│ │ │ │ │
* * * * *  Befehl

Feldbeschreibung im Detail

Feld Erlaubte Werte Beschreibung
Minute 0–59 Die Minute innerhalb einer Stunde
Stunde 0–23 Die Tagesstunde (24-Stunden-Uhr)
Tag des Monats 1–31 Der Kalendertag des Monats
Monat 1–12 oder JAN–DEC Der Monat des Jahres
Wochentag 0–7 oder SUN–SAT Der Wochentag (0 und 7 = Sonntag)

Wichtig: Wenn sowohl „Tag des Monats" als auch „Wochentag" von * abweichen, verwendet cron ODER-Logik — wenn eine der Bedingungen erfüllt ist, wird der Job ausgeführt. Das überrascht viele Einsteiger.


Erweiterte 6-Feld-Syntax (mit Sekunden)

Einige Scheduler — insbesondere Quartz Scheduler (Java), Spring Framework und verschiedene Cloud-Plattformen — fügen am Anfang ein Sekunden-Feld hinzu:

┌─────────── Sekunde      (0–59)
│ ┌───────── Minute       (0–59)
│ │ ┌─────── Stunde       (0–23)
│ │ │ ┌───── Tag d. Monats (1–31)
│ │ │ │ ┌─── Monat        (1–12)
│ │ │ │ │ ┌─ Wochentag    (1–7 in Quartz; 1=Sonntag)
│ │ │ │ │ │
0 * * * * ?

Beachten Sie, dass Quartz die Wochentage anders nummeriert (1=Sonntag, 7=Samstag) als Unix cron.


Sonderzeichen erklärt

* — Beliebiger Wert

Passt auf alle möglichen Werte dieses Feldes. * * * * * wird jede Minute ausgeführt.

, — Werteliste

Gibt mehrere einzelne Werte an. 0 9,12,18 * * * wird täglich um 9:00, 12:00 und 18:00 Uhr ausgeführt.

- — Bereich

Gibt einen inklusiven Bereich an. 0 9-17 * * 1-5 wird stündlich von 9 bis 17 Uhr, Montag bis Freitag, ausgeführt.

/ — Schrittweiten

*/n bedeutet „alle n Einheiten". */15 * * * * wird alle 15 Minuten ausgeführt. Mit Bereichen kombinierbar: 10-50/10 bedeutet 10, 20, 30, 40, 50.

? — Kein spezifischer Wert (nur Quartz/Spring)

Wird im Feld „Tag des Monats" oder „Wochentag" verwendet, um „beliebig" anzuzeigen. Da die gleichzeitige Angabe beider Felder mehrdeutig ist, muss eines davon ? sein.

L — Letzter (nur Quartz/Spring)

Im Tag des Monats: letzter Tag des Monats. Im Wochentag: letztes Vorkommen dieses Wochentags im Monat. 0 0 L * ? wird am letzten Tag jedes Monats um Mitternacht ausgeführt.

W — Nächster Werktag (nur Quartz/Spring)

15W im Tag des Monats bedeutet den dem 15. nächstgelegenen Werktag. Fällt der 15. auf einen Samstag, wird am Freitag dem 14. ausgeführt; fällt er auf einen Sonntag, am Montag dem 16.

# — N-tes Vorkommen des Wochentags (nur Quartz/Spring)

2#3 bedeutet den dritten Dienstag des Monats. Format: <Wochentag>#<Vorkommen>. 0 10 ? * 2#1 wird am ersten Montag jedes Monats um 10:00 Uhr ausgeführt.


Spezielle Zeit-Aliase

Die meisten Cron-Implementierungen unterstützen folgende praktische Kurzformen:

Alias Äquivalent Beschreibung
@yearly 0 0 1 1 * Einmal im Jahr, 1. Januar, Mitternacht
@annually 0 0 1 1 * Gleich wie @yearly
@monthly 0 0 1 * * Am ersten Tag jedes Monats, Mitternacht
@weekly 0 0 * * 0 Jeden Sonntag, Mitternacht
@daily 0 0 * * * Jeden Tag, Mitternacht
@midnight 0 0 * * * Gleich wie @daily
@hourly 0 * * * * Jede Stunde zur vollen Stunde
@reboot Einmal beim Systemstart

Häufige Cron-Ausdrücke

Ausdruck Bedeutung
* * * * * Jede Minute
0 * * * * Jede Stunde zur vollen Stunde
*/15 * * * * Alle 15 Minuten
0 0 * * * Täglich um Mitternacht
30 2 * * * Täglich um 2:30 Uhr
0 9-17 * * 1-5 Stündlich von 9–17 Uhr, Werktage
0 0 * * 0 Jeden Sonntag um Mitternacht
0 0 1 * * Am ersten Tag jedes Monats
0 0 1 1 * Am 1. Januar um Mitternacht
0 6 * * 1-5 Werktags um 6:00 Uhr
0 */6 * * * Alle 6 Stunden

Crontab unter Linux verwenden

# Persönliche Crontab bearbeiten
crontab -e

# Aktuelle Crontab-Einträge anzeigen
crontab -l

# Crontab vollständig entfernen
crontab -r

# Crontab eines anderen Benutzers bearbeiten (nur root)
crontab -u benutzername -e

Beispiel einer Crontab-Datei

# Umgebungsvariablen am Anfang setzen
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
[email protected]

# Backup täglich um 2:30 Uhr ausführen
30 2 * * * /usr/local/bin/backup.sh

# Bereinigung jeden Sonntag um Mitternacht, mit Protokollierung
0 0 * * 0 /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1

# Health-Check alle 15 Minuten
*/15 * * * * /usr/local/bin/health-check.sh

# Zeitzonen-bewusstes Cron (GNU cron / cronie-Erweiterung)
CRON_TZ=Europe/Berlin
0 9 * * 1-5 /usr/local/bin/morgenbericht.sh

Systemweite Cron-Verzeichnisse

  • /etc/crontab — System-Crontab mit zusätzlichem Benutzernamen-Feld
  • /etc/cron.d/ — Einzelne Cron-Dateien für Pakete und Dienste
  • /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/, /etc/cron.monthly/ — Skripte hier werden in den entsprechenden Intervallen via run-parts ausgeführt

Cron unter macOS und Windows

macOS: launchd

macOS hat den Cron-Daemon zugunsten von launchd abgekündigt. Obwohl cron noch funktioniert, bevorzugt Apple .plist-Dateien in ~/Library/LaunchAgents/ (Benutzeraufgaben) oder /Library/LaunchDaemons/ (Systemaufgaben). Viele Entwickler nutzen jedoch weiterhin cron aus Gründen der Einfachheit.

Windows: Aufgabenplanung

Windows verwendet den Aufgabenplaner (schtasks) mit einer eigenen XML-basierten Konfiguration. WSL (Windows-Subsystem für Linux) bietet eine vollständige Linux-Cron-Umgebung.


Anwendungs-Scheduler

Node.js — node-cron

const cron = require('node-cron');

// Täglich um 2:30 Uhr mit Zeitzone planen
cron.schedule('30 2 * * *', async () => {
  await taeglischesBackupAusfuehren();
}, {
  timezone: "Europe/Berlin"
});

Python — APScheduler

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger

scheduler = BlockingScheduler()

@scheduler.scheduled_job(CronTrigger.from_crontab('0 9 * * 1-5'))
def morgendliche_aufgabe():
    print("Guten Morgen! Es ist ein Werktag.")

scheduler.start()

Java — Quartz Scheduler

Quartz verwendet 6-Feld-Ausdrücke (Sekunde, Minute, Stunde, Tag, Monat, Wochentag) und unterstützt die erweiterten Zeichen (L, W, #, ?).

// Quartz: jeden Werktag um 9:00 Uhr
CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("0 0 9 ? * MON-FRI");

Cloud- und Container-Scheduler

AWS EventBridge Scheduler

Unterstützt 6-Feld-Cron-Ausdrücke (UTC). Eines der Felder „Tag des Monats" oder „Wochentag" muss ? sein:

cron(0 2 * * ? *)   # Täglich um 2 Uhr UTC

Google Cloud Scheduler

Verwendet die standardmäßige Unix 5-Feld-Syntax mit Zeitzonenunterstützung.

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: taegliches-backup
spec:
  schedule: "0 2 * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: backup-image:latest
          restartPolicy: OnFailure

concurrencyPolicy: Forbid verhindert überlappende Ausführungen, falls ein Job länger dauert als sein Intervall.


Zeitzonen-Behandlung

Cron läuft standardmäßig in der Zeitzone des Systems, die auf Servern oft UTC ist. Eine für 0 9 * * * geplante Aufgabe auf einem UTC-Server läuft um 9:00 UTC, was in Deutschland 10:00 Uhr MEZ oder 11:00 Uhr MESZ entspricht.

Best Practices für Zeitzonen:

  1. CRON_TZ=Europe/Berlin in der Crontab explizit angeben
  2. Zeitzonenfelder in Cloud-Plattformen (GCP Cloud Scheduler, Kubernetes spec.timeZone) nutzen
  3. Bei Sommerzeit (DST)-Umstellungen kann 0 2 * * * doppelt oder gar nicht ausgeführt werden — feste UTC-Zeiten bevorzugen
  4. In Kommentaren stets die Zeitzone eines Cron-Ausdrucks dokumentieren

Sicherheitsüberlegungen

Cron-Jobs laufen häufig mit erhöhten Rechten und sind eine häufige Angriffsfläche.

Prinzip der minimalen Rechte: Als Benutzer mit den geringstmöglichen Rechten ausführen, root vermeiden.

Keine Anmeldedaten im Code: Passwörter, API-Schlüssel oder Tokens niemals direkt in Crontab-Einträge oder Skripte schreiben. Umgebungsvariablen-Dateien mit eingeschränkten Rechten (chmod 600) oder Secret-Manager verwenden.

Skript-Berechtigungen: Sicherstellen, dass Cron-Skripte nicht von anderen Benutzern beschreibbar sind.

chmod 750 /usr/local/bin/backup.sh
chown root:staff /usr/local/bin/backup.sh

Überwachung und Alarmierung: MAILTO= für Fehler-Benachrichtigungen nutzen; Dienste wie Healthchecks.io oder Cronitor für Alarm bei ausgebliebener Ausführung einsetzen.


Best Practices

Jobs idempotent gestalten: Ein Job, der mehrfach ausgeführt werden kann, ohne unterschiedliche Ergebnisse zu produzieren, erleichtert die Fehlerwiederherstellung erheblich.

Datei-Locking gegen überlappende Ausführungen: Bei langsamen Jobs flock verwenden:

*/5 * * * * flock -n /var/lock/myjob.lock /usr/local/bin/myjob.sh

Ausgabe explizit umleiten:

0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Ausdrücke vor dem Deployment prüfen: Das Cron-Parser-Tool verwenden, um zu bestätigen, wann ein Ausdruck tatsächlich ausgelöst wird.

Crontabs versionieren: Crontab-Dateien in Git verwalten und mit Ansible oder Puppet konsistent auf Servern deployen — „Konfigurationsdrift" vermeiden.


Häufig gestellte Fragen (FAQ)

F: Warum wird mein Cron-Job nicht ausgeführt?
Die häufigsten Ursachen: (1) fehlende Ausführungsrechte am Skript, (2) Skript verlässt sich auf Umgebungsvariablen, die in der minimalen Cron-Umgebung fehlen, (3) PATH-Probleme — cron lädt keine Shell-Konfiguration, daher absolute Pfade für alle Befehle verwenden, (4) Cron-Daemon läuft nicht (systemctl status cron oder systemctl status crond prüfen).

F: Was ist der Unterschied zwischen */5 und 0/5?
Im Standard-Unix-Cron bedeutet */5 alle 5 Minuten ab 0 (also 0, 5, 10, ..., 55). 0/5 ist keine Standard-Unix-Cron-Syntax, wird aber in Quartz/AWS mit gleicher Bedeutung verwendet.

F: Kann Cron eine Aufgabe jede Sekunde ausführen?
Die minimale Granularität von Standard-Cron ist eine Minute. Für Sub-Minuten-Scheduling Anwendungs-Scheduler wie Quartz, APScheduler mit Intervall-Triggern oder systemd-Timer verwenden.

F: Wie führe ich einen Job am letzten Tag des Monats aus?
Standard-Cron hat keinen nativen „letzter Tag"-Operator. Übliche Lösung: prüfen, ob der nächste Tag der 1. ist: [ "$(date +\%d -d tomorrow)" = "01" ] && /pfad/zum/skript.sh. In Quartz-Cron L im Tag-des-Monats-Feld verwenden.

F: Was ist der Unterschied zwischen 0 0 * * 0 und @weekly?
Sie sind äquivalent: beide laufen um Mitternacht am Sonntag. @weekly ist ein mnemonisches Alias, das in den meisten modernen Cron-Implementierungen definiert ist.

F: Wie debugge ich ein Skript, das im Terminal funktioniert, aber in Cron fehlschlägt?
Cron läuft mit minimaler Umgebung (normalerweise nur HOME, LOGNAME, PATH=/usr/bin:/bin, SHELL=/bin/sh). #!/bin/bash und set -e zum Skript hinzufügen, absolute Pfade für alle Befehle verwenden, stdout/stderr in eine Log-Datei umleiten.


Zusammenfassung

Cron treibt die Unix-Automatisierung seit 1979 an und ist auch im Cloud-Zeitalter der meistgenutzte Scheduling-Mechanismus. Ob Sie einen einzelnen Linux-Server verwalten, Kubernetes-Workloads orchestrieren oder Cloud-Event-Trigger konfigurieren — ein tiefes Verständnis der Cron-Syntax spart Stunden beim Debugging und verhindert kostspielige Planungsfehler.

Kernpunkte:

  • Die 5-Feld-Standardsyntax deckt die große Mehrheit der Anwendungsfälle ab
  • / für Schritte, , für Listen, - für Bereiche
  • Zeitzone immer beachten — auf Servern UTC bevorzugen oder CRON_TZ explizit setzen
  • Sicherheitsprinzipien anwenden: minimale Rechte, keine Anmeldedaten im Code, Überwachung
  • Ausdrücke mit einem Parser-Tool prüfen, bevor sie in die Produktion gehen

Überblick

Cron-Jobs sind das Herzstück der modernen Automatisierung, aber ihre Syntax kann selbst für erfahrene Systemadministratoren abschreckend sein. Unser Online-Cron-Parser wurde entwickelt, um das Rätselraten bei der Planung zu beenden. Durch die Übersetzung kryptischer Cron-Ausdrücke in eine klare, für Menschen lesbare Sprache stellt dieses Tool sicher, dass Ihre geplanten Aufgaben genau dann ausgeführt werden, wenn Sie es beabsichtigt haben. Ganz gleich, ob Sie Backups, Bereinigungsskripte oder automatisierte E-Mails verwalten, Genauigkeit ist oberstes Gebot.

Hauptmerkmale

  • Echtzeit-Übersetzung: Sehen Sie sofort, was Ihr Cron-Ausdruck in einfachem Deutsch (oder Ihrer bevorzugten Sprache) bedeutet.
  • Nächste Laufzeiten: Sehen Sie sich eine Liste der nächsten 5 oder mehr geplanten Ausführungszeiten an, um Ihre Logik zu überprüfen.
  • Unterstützung für alle Felder: Verarbeitet Standard-Cron-Formate, einschließlich Varianten mit Sekunden (6 Felder) und Jahren (7 Felder).
  • Syntax-Hervorhebung: Visuelle Hinweise helfen Ihnen, Minuten, Stunden, Tage, Monate und Wochen zu identifizieren.

Anwendung

  1. Eingabe: Kopieren Sie Ihren Cron-Ausdruck in das Hauptfeld oder tippen Sie ihn ein.
  2. Beobachten: Die für Menschen lesbare Übersetzung wird automatisch aktualisiert, während Sie tippen.
  3. Überprüfen: Kontrollieren Sie die Liste der „Nächsten Ausführungszeiten“, um sicherzustellen, dass sie Ihren Anforderungen entspricht.
  4. Kopieren: Verwenden Sie die bereitgestellten Beispiele, wenn Sie ganz von vorn beginnen.

Häufige Anwendungsfälle

  • Serverwartung: Planung nächtlicher Datenbank-Backups oder Log-Rotationen.
  • Webentwicklung: Einrichten wiederkehrender Hintergrundaufgaben in Frameworks wie Laravel oder Django.
  • DevOps: Konfiguration von CI/CD-Pipelines und automatisierten Health-Checks.
  • Persönliche Produktivität: Verwalten wiederkehrender Erinnerungen oder Skriptausführungen auf lokalen Rechnern.

Technischer Hintergrund

Cron-Ausdrücke bestehen aus 5 bis 7 Feldern, die durch Leerzeichen getrennt sind. Jedes Feld steht für eine Zeiteinheit: Minute, Stunde, Tag des Monats, Monat und Wochentag. Unser Parser verwendet eine robuste Logik-Engine, die Sonderzeichen wie * (alle), , (Liste), - (Bereich), / (Schrittweite) und L (letzter) verarbeitet. Er berechnet die nächsten Vorkommen unter Berücksichtigung von Schaltjahren und Monatslängen genau.

Häufig gestellte Fragen

  • Werden Sekunden unterstützt? Ja, es werden 6-Feld-Cron-Ausdrücke unterstützt, die Sekunden enthalten.
  • Können nicht-standardmäßige Aliase wie @daily verarbeitet werden? Ja, gängige Aliase werden unterstützt.
  • Ist das Tool zeitzonenbewusst? Standardmäßig basieren die Berechnungen auf UTC, aber Sie können Ihre Perspektive entsprechend anpassen.

Einschränkungen

  • Unterschiedliche Implementierungen: Verschiedene Systeme (z. B. Quartz, AWS, Jenkins) weisen geringfügige Abweichungen in der Cron-Syntax auf; überprüfen Sie dies stets mit Ihrer spezifischen Plattform.
  • Grenzfälle: „Letzter Tag des Monats“ (L) und „Nächster Werktag“ (W) können sich je nach Betriebssystem unterschiedlich verhalten.