Skip to content

Crontab Generator & Cron-Ausdruck Builder

Erstellen, validieren und entschlüsseln Sie Cron-Ausdrücke im Browser. Live-Vorschau der nächsten Läufe in lokaler Zeit oder UTC. POSIX-5-Feld-Syntax, Voreinstellungen, Klartextbeschreibung. Kostenlos, privat, ohne Anmeldung.

Kein Tracking Läuft im Browser Kostenlos
Sämtliches Parsen und Berechnen der nächsten Läufe geschieht lokal in Ihrem Browser. Es werden keine Daten an einen Server gesendet.

Felder
Voreinstellungen

Klartext

Nächste 5 geplante Läufe

Zeitzone für die Vorschau der nächsten Läufe
    Geprüft auf POSIX-5-Feld-Konformität, Korrektheit der OR-Semantik, Verankerung des Schrittoperators, Expansion benannter Tokens und Ablehnung von Quartz-Operatoren mit hilfreichen Fehlern — Go Tools Engineering Team · May 20, 2026

    Was ist ein Cron-Ausdruck?

    Ein Cron-Ausdruck ist eine Zeichenkette aus fünf Feldern, die einen wiederkehrenden Zeitplan definiert. Von links nach rechts sind die Felder Minute (0-59), Stunde (0-23), Tag des Monats (1-31), Monat (1-12) und Wochentag (0-6, wobei 0 und 7 beide Sonntag bedeuten). Jedes Feld akzeptiert einen Wert, eine Liste (`1,3,5`), einen Bereich (`1-5`), einen Platzhalter (`*` für jeden Wert) oder einen Schritt (`*/15` für alle 15). Die Kombination definiert genau, wann der geplante Befehl laufen wird — `0 9 * * 1-5` liest sich zum Beispiel als „bei Minute 0, Stunde 9, jeder Tag des Monats, jeder Monat, Wochentag Montag bis Freitag" — im Klartext „werktags um 09:00 Uhr".

    Cron entstand 1979 in Unix Version 7, und die Fünf-Feld-Grammatik ist seit über vier Jahrzehnten im Wesentlichen unverändert geblieben — ein Beleg dafür, wie gut die ursprüngliche Syntax entworfen wurde. Heute werden Cron-Ausdrücke weit über die Unix-crontab-Datei hinaus eingesetzt: Kubernetes CronJobs, GitHub-Actions-Workflows, AWS-EventBridge-Regeln, geplante GitLab-CI-Pipelines, Cloudflare Workers Cron Triggers und Serverless-Plattformen in jeder Cloud akzeptieren dieselbe Fünf-Feld-Grammatik. Cron einmal zu lernen, bedeutet, in jeder modernen Infrastruktur Jobs einplanen zu können.

    Der POSIX-Standard definiert fünf Operatoren: `*` (beliebiger Wert), `,` (Werteliste), `-` (Bereich), `/` (Schritt) sowie benannte Tokens für Monate (JAN-DEC) und Wochentage (SUN-SAT). Die meisten Implementierungen expandieren außerdem fünf gängige Abkürzungen: `@yearly` (`0 0 1 1 *`), `@monthly` (`0 0 1 * *`), `@weekly` (`0 0 * * 0`), `@daily` (`0 0 * * *`) und `@hourly` (`0 * * * *`). Der Quartz-Scheduler (eine Java-Bibliothek) erweitert dies um ein optionales Sekundenfeld und zusätzliche Operatoren (`?`, `L`, `W`, `#`) — nützlich, wenn Sie in Java/Spring arbeiten, aber nicht portabel zu Standard-cron. Dieses Tool folgt dem POSIX-Fünf-Feld-Standard, weil er die dominante Variante ist und die, die Ihr Linux-Server, Ihr GitHub-Actions-Runner und Ihr Kubernetes-Cluster tatsächlich verstehen werden.

    Eine Eigenheit von POSIX-cron verdient besondere Beachtung: Wenn sowohl Tag des Monats als auch Wochentag eingeschränkt sind (keiner ist `*`), läuft der Zeitplan, wenn EINES VON BEIDEN zutrifft — OR-Semantik, nicht AND. `0 0 1 * 5` läuft also am 1. jedes Monats UND an jedem Freitag, nicht nur an Freitagen, die zufällig auf den 1. fallen. Das ist die mit Abstand häufigste Cron-Überraschung; die Vorschau der nächsten Läufe in diesem Tool macht es offensichtlich, indem sie die tatsächlichen Datums-/Zeitangaben zeigt, an denen der Zeitplan feuert. Verifizieren Sie vor dem Deployment.

    Sämtliches Parsen und Berechnen der nächsten Läufe findet vollständig in Ihrem Browser mittels JavaScript statt — es werden weder Ausdrücke, Zeitpläne noch sonstige Daten an einen Server gesendet. Dieses Tool parst jeden standardkonformen POSIX-Cron-Ausdruck sofort mit einer Klartextbeschreibung und einer Vorschau über fünf Läufe — bei vollständiger Privatsphäre.

    Cron-Ausdrücke sind eng mit anderen Entwicklertools verwandt. Cron-Jobs werden häufig debuggt, indem Unix-Zeitstempel mit den erwarteten Laufzeiten verglichen werden, und komplexe Zeitpläne werden oft als JSON-Konfiguration dokumentiert, die sich mit unserem JSON-Formatierer validieren lässt. Für einen ausführlichen Leitfaden, der die OR-Semantik, Zeitzonenfallen und gängige Cron-Varianten mit Beispielen für Linux, Kubernetes und GitHub Actions abdeckt, lesen Sie unsere Cron-Zeitplan-Referenz.

    # Linux crontab entry — runs every 15 minutes
    */15 * * * *  /usr/local/bin/poll-api.sh
    
    # Kubernetes CronJob — weekdays at 9:00 AM UTC
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: daily-report
    spec:
      schedule: "0 9 * * 1-5"
      timeZone: "UTC"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: report
                  image: report-runner:1.0
              restartPolicy: OnFailure
    
    # GitHub Actions workflow — hourly
    on:
      schedule:
        - cron: '0 * * * *'
    
    # AWS EventBridge — first of each month
    ScheduleExpression: cron(0 0 1 * ? *)
    # (Note: AWS uses the Quartz 6-field form with '?' for day-of-week)

    Hauptfunktionen

    Live-POSIX-5-Feld-Parser

    Strikter Parser nach POSIX-cron: Minute (0-59), Stunde (0-23), Tag des Monats (1-31), Monat (1-12 oder JAN-DEC), Wochentag (0-6 oder SUN-SAT, wobei 7 ebenfalls Sonntag akzeptiert). Alle Standardoperatoren (`*` `,` `-` `/`) und Makros (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`) werden unterstützt.

    Vorschau der nächsten 5 Läufe

    Berechnet die nächsten fünf geplanten Laufzeiten ab Ihrer aktuellen lokalen Zeit. Wechseln Sie mit einem Klick zwischen Lokal und UTC — die zuverlässigste Methode, um Zeitzonenüberraschungen zu erkennen, bevor Sie eine crontab auf einen Server in einer anderen Region deployen.

    Klartextbeschreibung

    Jeder gültige Ausdruck erhält eine menschenlesbare Erklärung: „Alle 15 Minuten", „Werktags um 09:00 Uhr", „Um 02:30 am 1. Tag des Monats, im Januar und Juli". Macht Code-Review und Team-Übergabe mühelos — kein Rätselraten mehr, was `*/5 9-17 * * 1-5` tatsächlich tut.

    Feldspezifische Fehlermeldungen

    Ungültige Ausdrücke erhalten sofortiges rotes Feedback mit dem fehlerhaften Feld hervorgehoben und einem spezifischen Fehler: „Fehler in Minute: Wert außerhalb des Bereichs [0, 59]: "60"". Keine stillen crontab-Fehler mehr, die drei Tage später entdeckt werden, wenn der Bericht nicht gelaufen ist.

    Preset-Chips für gängige Zeitpläne

    Elf Ein-Klick-Voreinstellungen decken die Zeitpläne ab, die Sie tatsächlich nutzen werden: jede Minute, alle 5/15 Minuten, jede Stunde, täglich um Mitternacht oder 9 Uhr, werktags um 9 Uhr, wöchentlich am Sonntag/Montag, am 1. jedes Monats und jährlich. Antippen, anpassen, ausrollen.

    Eingaben für Builder pro Feld

    Sie müssen sich die Fünf-Feld-Reihenfolge nicht merken — fünf kleine Eingaben mit den Bezeichnungen Minute, Stunde, Tag des Monats, Monat, Wochentag lassen Sie eine Position nach der anderen bearbeiten, ohne einen Wert auszulassen oder die Reihenfolge zu verwechseln. Der vollständige Ausdruck oben wird automatisch neu aufgebaut.

    POSIX-OR-Semantik richtig umgesetzt

    Wenn sowohl Tag des Monats als auch Wochentag eingeschränkt sind, greift die OR-Regel — `0 0 1 * 5` läuft an jedem 1. UND an jedem Freitag. Die Vorschau der nächsten Läufe macht das sichtbar, bevor Sie deployen; keine überraschenden Wochenend-Pages mehr.

    100 % browserbasierte Privatsphäre

    Ihre Cron-Ausdrücke — die oft Infrastruktur-Timing und interne Scheduling-Muster offenlegen — verlassen Ihren Browser nie. Es werden keine Daten an einen Server gesendet, kein Logging, keine Analytics. Sie können das im Netzwerk-Tab Ihres Browsers überprüfen. Sicher für Produktionszeitpläne und interne Systeme.

    Quartz-bewusste Fehlermeldungen

    Wenn Sie einen Quartz-Ausdruck mit `?` `L` `W` oder `#` einfügen, erklärt der Parser „Quartz operators not supported — use POSIX syntax", damit Sie wissen, dass Sie für cron umschreiben müssen, statt einen stillen Fehlschlag zu debuggen. Quartz-Zeitpläne laufen nicht auf Linux-cron.

    Cron-Varianten & Scheduler

    Vixie cron (Linux-Standard)

    5-Feld POSIX

    Der Standard auf den meisten Linux-Distributionen. Striktes POSIX mit der Erweiterung `CRON_TZ=` für explizite Zeitzone. OR-Semantik für Tag des Monats / Wochentag gilt. Hauptziel dieses Tools.

    BSD cron

    5-Feld POSIX

    Standard auf macOS und in der BSD-Familie. POSIX-kompatibel mit kleineren Implementierungsunterschieden zu vixie cron; die meisten Ausdrücke funktionieren identisch.

    systemd-Timer (OnCalendar)

    Kalender-Spec, kein cron

    Alternative zu cron auf systemd-basiertem Linux. Verwendet die Syntax `OnCalendar: 2026-*-* 09:00:00` — lesbarer für nicht-wiederkehrende Zeitpläne, aber nicht interoperabel mit Cron-Ausdrücken.

    Quartz Scheduler (Java/Spring)

    6 oder 7 Felder

    Ergänzt Sekunden (Pflicht) und Jahr (optional) als Felder sowie die Operatoren `?`, `L`, `W`, `#`. Nützlich für Java-Apps, aber nicht portabel zu Linux-cron.

    AWS EventBridge

    6-Feld Quartz-Stil mit `?`

    Verlangt, dass Wochentag oder Tag des Monats `?` ist (Quartz-Konvention) statt `*`, wenn nur einer eingeschränkt ist. Ausdrücke lassen sich nicht direkt auf Linux-cron portieren.

    Kubernetes CronJob

    5-Feld POSIX + timeZone-Feld

    POSIX-5-Feld-Zeitplan plus Feld `spec.timeZone` (1.27+). Sauberer, als sich auf die Host-Zeitzone des kubelet zu verlassen. Ausdrücke portieren direkt von Linux-cron.

    GitHub Actions

    5-Feld POSIX

    Läuft immer in UTC. Best-Effort-Timing — kann unter hoher Last übersprungen werden. Vermeiden Sie Intervalle kürzer als 15 Minuten. Ausdrücke portieren direkt von Linux-cron.

    Beispiele für Cron-Ausdrücke

    Alle 15 Minuten

    */15 * * * *

    Schrittoperator: `*/15` im Minutenfeld bedeutet „alle 15 Minuten, beginnend bei Minute 0" — Läufe also bei :00, :15, :30, :45 in jeder Stunde jedes Tages. Das gängigste Intervall für API-Polling, Cache-Aktualisierung und Heartbeat-Prüfungen.

    Werktags um 09:00 Uhr

    0 9 * * 1-5

    Der Bereich `1-5` im Wochentagsfeld bedeutet Montag bis Freitag (1=Mo, 5=Fr). Läuft exakt um 09:00 — nützlich für Berichte zu Geschäftszeiten, Batch-Jobs, die auf Daten aus der Nacht angewiesen sind, und tägliche Standup-Erinnerungen.

    Am 1. jedes Monats um Mitternacht

    0 0 1 * *

    Tag des Monats `1`, alle anderen unteren Felder auf null. Gängig für monatliche Abrechnungen, Logrotation und Periodenabschluss-Abgleich. Tag des Monats und Wochentag sind beide nur eingeschränkt, wenn keiner `*` ist — hier ist der Wochentag `*`, also zählt nur der Tag des Monats.

    Alle 5 Minuten zwischen 9 und 17 Uhr, werktags

    */5 9-17 * * 1-5

    Kombiniert Schritt (`*/5`) mit Bereich (`9-17`) in verschiedenen Feldern. Nützlich für Monitoring ausschließlich in Geschäftszeiten oder das Abarbeiten von Queues. Insgesamt: 12 Läufe/Std × 9 Std × 5 Tage = 540 Läufe pro Arbeitswoche.

    Quartalsweise: 1. Jan, Apr, Jul, Okt um Mitternacht

    0 0 1 JAN,APR,JUL,OCT *

    Benannte Monate in einer kommagetrennten Liste. Quartalspläne wie Finanzabschluss, Code-Freeze-Reviews oder Compliance-Audits. Sie können Namen und Zahlen mischen (`1,APR,7,10` parst identisch), aber bleiben Sie der Lesbarkeit halber bei einem Stil.

    POSIX-OR-Falle: 1. des Monats ODER jeden Freitag

    0 0 1 * 5

    Wenn SOWOHL Tag des Monats (`1`) ALS AUCH Wochentag (`5`) eingeschränkt sind, läuft POSIX-cron den Job, wenn EINES VON BEIDEN zutrifft. Das feuert also am 1. jedes Monats UND an jedem Freitag — nicht nur an Freitagen, die auf den 1. fallen. Das ist die mit Abstand häufigste Cron-Überraschung; die Vorschau der nächsten Läufe macht es offensichtlich.

    Täglich um 02:30 (Niedriglast-Fenster)

    30 2 * * *

    Spezifische Werte für Stunde und Minute, Platzhalter an den übrigen Stellen. Das Fenster 02:00–04:00 UTC ist die De-facto-Konvention für nächtliche Batch-Jobs, weil es sich mit keiner wichtigen Geschäftsregion überschneidet. Kombinieren Sie es mit dem UTC-Zeitzonen-Toggle, um zu bestätigen, dass der Lauf dort landet, wo Sie ihn erwarten.

    Makro-Äquivalent: @daily

    @daily

    Die Abkürzung `@daily` (auch `@midnight`) expandiert zu `0 0 * * *` — jeden Tag um Mitternacht. Weitere Makros: `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. Makros sind kompakt, aber die Fünf-Feld-Form ist über Scheduler hinweg portabler (manche unterstützen Makros, andere nicht).

    Wie man einen Cron-Ausdruck baut

    1. 1

      Cron-Ausdruck eintippen oder einfügen

      Geben Sie einen Fünf-Feld-Cron-Ausdruck in das obige Eingabefeld ein (z. B. `*/15 * * * *`). Das Tool parst und validiert während des Tippens — grüner Haken für gültig, roter Fehler mit Feldname für ungültig. Makros wie `@daily`, `@hourly` etc. werden ebenfalls akzeptiert.

    2. 2

      Oder die fünf Feldeingaben anpassen

      Sie müssen sich die Feldreihenfolge nicht merken — bearbeiten Sie Minute, Stunde, Tag des Monats, Monat oder Wochentag einzeln über die beschrifteten Eingaben. Der vollständige Ausdruck oben aktualisiert sich automatisch. Verwenden Sie `*` für Platzhalter, `*/N` für Schritte, `a-b` für Bereiche und `1,3,5` für Listen.

    3. 3

      Eine Voreinstellung als Startpunkt wählen

      Tippen Sie einen beliebigen Preset-Chip an (Alle 15 Minuten, Werktags um 9 Uhr usw.), um einen gängigen Zeitplan zu laden, und passen Sie dann die Felder an Ihren genauen Bedarf an. Elf Voreinstellungen decken die Muster ab, die Sie in der Produktion tatsächlich nutzen werden.

    4. 4

      Vorschau der nächsten Läufe prüfen

      Sehen Sie sich die fünf anstehenden Lauf-Datumsangaben an — wechseln Sie zwischen Lokal und UTC, um zu bestätigen, dass der Zeitplan feuert, wenn Sie es beabsichtigen. Das ist die zuverlässigste Methode, um die POSIX-Tag-des-Monats-/Wochentags-OR-Falle abzufangen, bevor sie Sie in der Produktion erwischt.

    5. 5

      Kopieren und in Ihren Scheduler einfügen

      Klicken Sie auf Kopieren, um den Ausdruck zu übernehmen. Fügen Sie ihn in Ihre crontab, Ihren systemd-Timer, das `cron:` in GitHub Actions, AWS EventBridge, das `schedule` eines Kubernetes CronJob oder einen beliebigen cron-kompatiblen Scheduler ein. Vergessen Sie nicht, die Zeitzone des Ziel-Schedulers zu überprüfen — siehe den Abschnitt Best Practices unten.

    Häufige Cron-Fehler

    POSIX-OR-Falle: Beide Tag-Felder eingeschränkt

    Wenn SOWOHL Tag des Monats ALS AUCH Wochentag eingeschränkt sind, läuft POSIX-cron den Job, wenn EINES VON BEIDEN zutrifft — nicht beide. `0 0 1 * 5` feuert also am 1. jedes Monats UND an jedem Freitag, nicht nur an Freitagen, die auf den 1. fallen. Verwenden Sie `*` in einem der beiden Tag-Felder, wenn Sie eine einzelne Bedingung wollen, oder schreiben Sie ein Wrapper-Skript, das die AND-Prüfung durchführt.

    ✗ Falsch
    # Beabsichtigt: „erster Freitag des Monats"
    0 0 1-7 * 5
    # Tatsächlich: feuert an Tagen 1-7 des Monats ODER an jedem Freitag — beide Bedingungen
    ✓ Richtig
    # Wrapper für echte AND-Semantik verwenden
    0 0 * * 5  [ $(date +\%d) -le 7 ] && /your-script
    # ODER eine Bedingung weglassen und den lockereren Zeitplan akzeptieren

    Zeitzonen-Drift zwischen Dev und Prod

    Cron-Zeitpläne auf einem Linux-Server verwenden die System-Zeitzone, nicht die lokale Zeitzone des Autors. Ein cron um 09:00 auf einem auf UTC eingestellten Server feuert um 04:00 US East. Entwerfen Sie Zeitpläne immer gegen die Zeitzone des Zielservers — am besten UTC — und fixieren Sie die Zeitzone explizit mit `CRON_TZ=...` am Anfang der crontab.

    ✗ Falsch
    # Geschrieben von US-East-Dev, deployt auf UTC-Server
    0 9 * * *  /your-report.sh
    # Feuert um 09:00 UTC = 04:00 US East — nicht, was der Dev meinte
    ✓ Richtig
    # Zeitzone fixieren oder explizit in UTC schreiben
    CRON_TZ=America/New_York
    0 9 * * *  /your-report.sh

    Verwirrung beim Schrittoperator: '*/15' vs. '15'

    `*/15` in Minute bedeutet „alle 15 Minuten, beginnend bei 0" (also 0, 15, 30, 45). Nur `15` bedeutet „nur zur Minute 15" — ein Lauf pro Stunde. Anfänger schreiben häufig `15` in der Annahme, das wäre alle 15 Minuten; die Klartextbeschreibung des Tools macht den Fehler vor dem Deployment offensichtlich.

    ✗ Falsch
    # Beabsichtigt: alle 15 Minuten
    15 * * * *
    # Tatsächlich: einmal pro Stunde, zur Minute 15 (4 Läufe/Stunde weniger als beabsichtigt)
    ✓ Richtig
    # Korrekt
    */15 * * * *
    # Alle 15 Minuten: Minute 0, 15, 30, 45 jeder Stunde

    Sechs-Feld-Ausdruck auf POSIX-Scheduler

    Quartz/Spring/node-cron unterstützen ein optionales Sekundenfeld als erste Position. Linux-crontab, GitHub Actions, AWS EventBridge (meist) und Kubernetes CronJob tun das NICHT — sie erwarten fünf Felder. Das Einfügen eines Sechs-Feld-Ausdrucks bricht den Zeitplan stillschweigend: Ihre Sekunden werden zu Minuten, Minuten zu Stunden usw.

    ✗ Falsch
    # Quartz-6-Feld in Linux-crontab kopiert
    0 0 9 * * 1-5
    # Linux liest: Minute=0, Stunde=0, dom=9, Monat=*, dow=1-5
    # = Mitternacht an Tagen 9 in Monaten mit passendem Wochentag — Chaos
    ✓ Richtig
    # POSIX-5-Feld, Sekunden weglassen
    0 9 * * 1-5
    # = werktags um 09:00 Uhr

    Tag des Monats außerhalb des Bereichs für den Monat

    Cron validiert den Tag des Monats nicht gegen den tatsächlichen Monat. `0 0 31 2 *` (31. Februar) parst problemlos, trifft aber nie zu — der Februar hat höchstens 29 Tage. Anfänger gehen davon aus, dass der Parser das abfängt; tut er nicht. Die Vorschau der nächsten Läufe in diesem Tool zeigt „Keine anstehenden Läufe", wenn ein Ausdruck strukturell gültig, aber logisch unmöglich ist.

    ✗ Falsch
    # 30. oder 31. Februar — läuft nie
    0 0 30 2 *
    0 0 31 2 *
    # Parst, aber kein Zeitplan feuert je
    ✓ Richtig
    # Muster „letzter Wochentag im Februar" per Skript
    0 0 28-29 2 *  [ $(date -d tomorrow +\%m) = 03 ] && /your-script

    Quartz-Syntax mit POSIX verwechselt

    AWS-Doku, Spring-Tutorials und viele Stack-Overflow-Antworten zeigen Quartz-Cron-Ausdrücke mit `?`, `L`, `W` oder `#`. Diese funktionieren nicht in Linux-crontab. Wenn Sie einen Sechs-Feld-Ausdruck mit `?` im Wochentag-Slot kopieren, wird der Linux-Parser ihn ablehnen (oder schlimmer, stillschweigend falsch parsen). Dieses Tool fängt Quartz-Operatoren ab und erklärt den Unterschied.

    ✗ Falsch
    # Quartz: „letzter Freitag des Monats" — in POSIX ungültig
    0 0 ? * 6L *
    ✓ Richtig
    # POSIX-Wrapper-Skript-Ansatz für letzten Freitag
    0 0 25-31 * 5  /your-script
    # Läuft freitags zwischen dem 25. und 31. eines beliebigen Monats

    Häufige Anwendungsfälle

    Linux-crontab-Jobs
    Erstellen und verifizieren Sie Einträge für `/etc/crontab`, `/etc/cron.d/*` oder benutzerspezifische `crontab -e`-Dateien. Verwenden Sie die Vorschau der nächsten Läufe, um vor dem Speichern zu bestätigen, dass der Zeitplan in der konfigurierten Zeitzone Ihres Servers zur richtigen Zeit landet.
    Kubernetes-CronJob-Zeitpläne
    Erzeugen Sie das Feld `spec.schedule` für einen Kubernetes CronJob. Kubernetes 1.27+ unterstützt außerdem `spec.timeZone` — nutzen Sie den UTC-Toggle, um Ihren Zeitplan in UTC zu entwerfen, und setzen Sie dann `timeZone` explizit, um die lokale Zeit des Worker-Nodes zu umgehen.
    Geplante GitHub-Actions-Workflows
    Bauen Sie den `cron:`-Eintrag unter `on.schedule`. GitHub Actions läuft immer in UTC — schalten Sie die Vorschau auf UTC um, um Ihren Zeitplan zu bestätigen. Vermeiden Sie Intervalle kürzer als 15 Minuten; der Scheduler von GitHub überspringt Kurzintervalljobs unter Last.
    AWS-EventBridge-Regeln
    Komponieren Sie den Cron-Ausdruck für eine geplante EventBridge-Regel. Hinweis: AWS verwendet die Quartz-artige Sechs-Feld-Syntax mit `?` für den Wochentag — dieses Tool liefert POSIX-Fünf-Feld, das Sie umwandeln müssen, indem Sie Sekunden (`0`) voranstellen und das `*` in einem der beiden Tag-Felder durch `?` ersetzen.
    Geplante GitLab-CI-Pipelines
    Verifizieren Sie den Cron-Ausdruck für eine geplante CI-Pipeline in GitLab. GitLab verwendet POSIX-Fünf-Feld-Syntax — also das, was dieses Tool ausgibt — und einen UI-Datumspicker, aber das Cron-Formular gibt Ihnen feinere Kontrolle für nicht-standardmäßige Intervalle.
    Cloudflare Workers Cron Triggers
    Bauen Sie den `[triggers.crons]`-Eintrag in `wrangler.toml`. Cloudflare verwendet POSIX-Fünf-Feld-Syntax. Minimales Intervall ist eine Minute; der Worker läuft in UTC. Verwenden Sie die Vorschau, um zu prüfen, dass der Trigger innerhalb Ihres erwarteten Fensters feuert.
    Node.js-node-cron-Zeitpläne
    Erstellen Sie Ausdrücke für die Bibliothek `node-cron`, die sowohl POSIX mit fünf Feldern als auch ein optionales vorangestelltes Sekundenfeld unterstützt. Bleiben Sie bei fünf Feldern, es sei denn, Sie benötigen ausdrücklich Sub-Minuten-Präzision — Sechs-Feld-Ausdrücke lassen sich nicht in Linux-crontab portieren.
    Code-Review und Dokumentation
    Fügen Sie einen Cron-Ausdruck aus einem PR oder Runbook ein, um sofort zu sehen, was er tut — kein Rätselraten mehr bei `30 7 * * 1-5` und kein Herauskramen einer Referenzkarte. Die Klartextbeschreibung eignet sich auch hervorragend für Inline-Kommentare und README-Dateien.

    Cron-Syntax-Referenz

    Feldreihenfolge: M H D M W
    Minute (0-59), Stunde (0-23), Tag des Monats (1-31), Monat (1-12), Wochentag (0-6, 7 = ebenfalls Sonntag). Eselsbrücke: „My Hat Doesn't Match Wendy's". Das Wochentagsfeld akzeptiert sowohl numerische (0-6) als auch benannte Tokens (SUN-SAT, Groß-/Kleinschreibung egal).
    Operatoren
    `*` = beliebiger Wert; `,` = Listentrenner (`1,3,5`); `-` = Bereich (`1-5`); `/` = Schritt (`*/15`, `5/10`); Namen: JAN-DEC für Monat, SUN-SAT für Wochentag (Groß-/Kleinschreibung egal).
    Makros (Aliase)
    `@yearly` = `0 0 1 1 *`; `@annually` = `0 0 1 1 *`; `@monthly` = `0 0 1 * *`; `@weekly` = `0 0 * * 0`; `@daily` = `0 0 * * *`; `@midnight` = `0 0 * * *`; `@hourly` = `0 * * * *`. `@reboot` ist ein spezielles Nicht-Schedule (läuft nur beim Booten) und wird mit einer erklärenden Fehlermeldung abgelehnt.
    POSIX-Tag-Semantik (OR-Regel)
    Wenn SOWOHL Tag des Monats ALS AUCH Wochentag eingeschränkt sind (keines ist `*`), läuft der Zeitplan, wenn EINES VON BEIDEN zutrifft — OR-Semantik. Wenn nur eines eingeschränkt ist, entscheidet dieses. Sind beide `*`, passt jeder Tag. Diese OR-Regel gilt für vixie cron, BSD cron und die meisten POSIX-Implementierungen; Quartz nutzt `?`, um AND vs. OR zu disambiguieren.
    Sechs-Feld-Modus (Quartz-Lite)
    Wenn Ihre Eingabe sechs durch Leerzeichen getrennte Tokens hat, behandelt das Tool das erste als Sekundenfeld (0-59). Nützlich für Quartz, Spring `@Scheduled(cron=...)` und node-cron. NICHT portabel zu Linux-crontab oder POSIX-Schedulern — sie würden Ihre Sekunden als Minuten interpretieren und alles um eine Position verschieben.
    Verankerung des Schrittoperators
    `*/N` ist am niedrigsten Wert des Feldes verankert: `*/15` in Minute = `0,15,30,45`, nicht „alle 15 ab jetzt". Mit einer Basis ohne Platzhalter: `5/15` in Minute = `5,20,35,50`. Schrittwerte, die den Feldbereich nicht gleichmäßig teilen, überspringen am Rollover — das ist korrekt, kein Bug.
    Validierungsgrenzen
    Minute ∈ [0,59], Stunde ∈ [0,23], Tag des Monats ∈ [1,31], Monat ∈ [1,12], Wochentag ∈ [0,7]. Werte außerhalb des Bereichs erzeugen einen feldspezifischen Fehler. Der Tag des Monats wird NICHT gegen den Monat validiert (`0 0 31 2 *` parst problemlos, trifft aber nie zu, weil Februar keinen 31. hat — die Vorschau der nächsten Läufe zeigt „Keine anstehenden Läufe").
    Quartz-Operatoren werden abgelehnt
    POSIX-cron unterstützt Quartz' `?` (kein bestimmter Wert), `L` (letzter), `W` (nächstgelegener Wochentag) oder `#` (n-ter Wochentag) nicht. Dieses Tool lehnt sie mit einer klaren „Quartz operators not supported"-Meldung ab, statt sie stillschweigend als ungültiges POSIX zu parsen. Für Quartz-Zeitpläne verwenden Sie stattdessen ein Quartz-bewusstes Tool oder den Spring-Scheduler.
    Jahresgrenze bei der Suche nach dem nächsten Lauf
    Die Berechnung des nächsten Laufs sucht bis zu 4 Jahre nach vorne; Ausdrücke, die seltener als das zutreffen (z. B. Muster „29. Februar"), zeigen „Keine anstehenden Läufe in den nächsten 4 Jahren". Das ist beabsichtigt, um unbegrenzte Iteration auf unmöglichen Mustern zu vermeiden.

    Best Practices für Cron-Zeitpläne

    UTC auf Servern verwenden, zur Anzeigezeit umrechnen
    Setzen Sie Ihre Server auf UTC (`/etc/timezone` oder `TZ=UTC`) und schreiben Sie alle Cron-Ausdrücke in UTC. Rechnen Sie erst zur Anzeigezeit in Ihren Dashboards und Berichten in die lokale Zeit um. Das eliminiert eine ganze Kategorie von Zeitzonen-Bugs, die bei Sommerzeit-Wechseln am härtesten zuschlagen, wenn Zeitpläne in lokaler Zeit stillschweigend doppelt feuern oder einen Lauf überspringen. Verwenden Sie den UTC-Toggle in diesem Tool, um Ihren Zeitplan von Anfang an in UTC zu entwerfen.
    POSIX-Tag-des-Monats/Wochentag-OR-Falle vermeiden
    Schränken Sie niemals sowohl Tag des Monats ALS AUCH Wochentag ein, es sei denn, Sie wollen OR-Semantik. Wenn Sie „jeden Montag im Januar" wollen, schreiben Sie `0 0 * 1 1` (Tag des Monats ist `*`); wenn Sie „den 1. jedes Monats" wollen, schreiben Sie `0 0 1 * *` (Wochentag ist `*`). Die POSIX-OR-Regel bewirkt, dass `0 0 1 * 1` am 1. UND an jedem Montag läuft — fast sicher nicht das, was Sie beabsichtigt haben. Die Vorschau der nächsten Läufe fängt das ab, wenn Sie vor dem Deployment prüfen.
    Zeitzone des Zeitplans explizit fixieren
    Moderne Scheduler unterstützen das Fixieren der Zeitzone in der Zeitplandefinition: `CRON_TZ=America/New_York` am Anfang einer crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` für Kubernetes CronJobs 1.27+, Schedule-Ausdruck mit `ScheduleExpressionTimezone` für AWS EventBridge Scheduler. Fixieren Sie die Zeitzone explizit, statt sich auf den Standard des Servers zu verlassen — Server-Zeitzonen können sich bei Infrastruktur-Migrationen ohne Vorwarnung ändern.
    Last über Minuten verteilen, nicht auf :00
    Vermeiden Sie `0 * * * *` (jede Stunde zur Minute 0) für unkritische Jobs — im großen Maßstab erzeugt das Planen vieler Dinge exakt zur Minute :00 Lastspitzen. Wählen Sie einen zufälligen Minuten-Offset (`23 * * * *`, `41 * * * *`) für jeden Job, um die Last zu verteilen. Dasselbe gilt für tägliche Jobs: `30 3 * * *` ist für Ihre Datenbank freundlicher als `0 3 * * *`, wenn viele Jobs auf 03:00 zusammenlaufen.
    Jobs idempotent machen
    Cron hat keinen eingebauten Retry, keine Überlappungsverhinderung, keine Wiederherstellung verpasster Läufe. Ihr Job sollte mehrfach ausgeführt werden können (idempotent) und sich selbst prüfen. Statt „Bericht um 9 Uhr verschicken" entwerfen Sie ihn als „heutigen Bericht verschicken, falls noch nicht verschickt" — das heilt sich selbst nach Ausfallzeiten, versehentlichen doppelten Zeitplänen und gleichzeitigen Läufen. Idempotenz ist eine Eigenschaft des Jobs, nicht des Schedulers, und sie ist die wichtigste Zuverlässigkeitspraxis.
    Heartbeat für kritische Zeitpläne hinzufügen
    Der stille Fehlermodus von cron ist seine größte Schwäche — wenn der Zeitplan nicht feuert, sagt Ihnen nichts Bescheid. Lassen Sie bei kritischen Jobs den Job am Ende jedes Laufs einen Heartbeat-Dienst (Healthchecks.io, Cronitor, Dead Man's Snitch) anpingen; der Dienst alarmiert Sie, wenn der erwartete Ping ausbleibt. Das erfasst sowohl das Scheitern des Jobs als auch das Fehlfeuern des Zeitplans selbst. Der kostenlose Tarif deckt die meisten persönlichen und kleinen Team-Anforderungen ab.
    Mit der Vorschau der nächsten Läufe vor dem Ausrollen verifizieren
    Bevor Sie einen neuen Cron-Zeitplan deployen, sehen Sie sich die fünf anstehenden Lauf-Datumsangaben in der Vorschau dieses Tools an. Wechseln Sie zwischen Lokal und UTC. Bestätigen Sie, dass der Zeitplan landet, wenn Sie es beabsichtigen — nicht fünf Minuten zu früh, nicht am falschen Tag, nicht unter Auslassung des Wochenendes, das Ihnen wichtig war. Die Vorschau ist der billigste denkbare Produktionstest.

    Häufig gestellte Fragen

    Was macht dieses Tool?
    Es parst, validiert und erklärt Cron-Ausdrücke in Ihrem Browser, mit einer Live-Vorschau der nächsten fünf geplanten Läufe in Ihrer Zeitzone oder in UTC. Geben Sie einen beliebigen standardkonformen POSIX-Fünf-Feld-Cron-Ausdruck ein — oder verwenden Sie die Preset-Chips und Pro-Feld-Eingaben, um einen zu bauen, ohne die Syntax auswendig zu lernen — und das Tool erzeugt eine Klartextbeschreibung („Alle 15 Minuten", „Werktags um 09:00 Uhr" etc.) plus die tatsächlichen Datums-/Zeitangaben, an denen der Job feuert. Falsche Ausdrücke werden sofort mit einer feldspezifischen Fehlermeldung abgefangen, sodass Sie kein Deployment für einen kaputten Zeitplan verschwenden. Das gesamte Tool läuft zu 100 % clientseitig: nichts wird hochgeladen, protokolliert oder gespeichert — sicher für Produktions-crontabs und interne Zeitpläne mit sensiblen Timing-Mustern.
    Was ist ein Cron-Ausdruck?
    Ein Cron-Ausdruck ist eine Zeichenkette aus fünf Feldern, die einen wiederkehrenden Zeitplan definiert. Die Felder sind Minute (0-59), Stunde (0-23), Tag des Monats (1-31), Monat (1-12) und Wochentag (0-6, wobei 0 und 7 beide Sonntag bedeuten). Jedes Feld akzeptiert einen Wert, eine Liste (`1,3,5`), einen Bereich (`1-5`), einen Platzhalter (`*` = beliebig) oder einen Schritt (`*/15` = alle 15). Die Kombination aller fünf Felder definiert genau, wann der geplante Befehl laufen soll. Cron entstand in Unix V7 (1979) und bleibt die De-facto-Sprache für zeitbasierte Jobplanung auf Linux/Unix, in der Container-Orchestrierung (Kubernetes CronJobs), in CI/CD (GitHub Actions, GitLab CI) und in Serverless-Plattformen (AWS EventBridge, Cloudflare Workers Cron Triggers). Trotz vieler über die Jahrzehnte vorgeschlagener Alternativen hat keine die knappe, ausdrucksstarke Fünf-Feld-Grammatik von Cron verdrängt.
    Werden meine Daten irgendwohin hochgeladen?
    Nein. Sämtliches Parsen, Validieren und Berechnen der nächsten Läufe läuft zu 100 % clientseitig in Ihrem Browser mit JavaScript. Ihre Ausdrücke werden niemals übertragen, niemals auf einem Server gespeichert, niemals protokolliert und niemals analysiert. Damit ist das Tool sicher für Produktions-crontabs, interne Scheduling-Muster, die Infrastruktur-Timing offenlegen, und alle sensiblen Zeitpläne. Sie können das im Netzwerk-Tab Ihres Browsers überprüfen — das Eintippen eines Cron-Ausdrucks löst null Netzwerk-Requests aus. Das Tool verwendet keine Cookies für Eingabedaten und keine Drittanbieter-Analytics, die erfassen würden, was Sie tippen.
    Was ist der Unterschied zwischen POSIX-cron und Quartz?
    POSIX-cron ist der Fünf-Feld-Standard, der von Unix/Linux-crontab, systemd-Timern, GitHub Actions, GitLab CI, AWS EventBridge, Kubernetes CronJobs und den meisten Schedulern verwendet wird. Quartz ist eine Java-Scheduling-Bibliothek, die ein Sekundenfeld ergänzt (insgesamt sechs oder sieben Felder) und zusätzliche Operatoren hinzufügt: `?` (kein bestimmter Wert, eingesetzt bei Konflikt zwischen Tag des Monats und Wochentag), `L` (last — letzter Tag des Monats, letzter Freitag etc.), `W` (nächstgelegener Wochentag) und `#` (n-ter Wochentag des Monats, z. B. `2#1` = erster Dienstag). Dieses Tool implementiert POSIX-cron, weil es weitaus weiter verbreitet ist; Quartz-Operatoren werden als Syntaxfehler mit der klaren Meldung „Quartz operators not supported" gemeldet. Wenn Sie Quartz brauchen, sind verbreitete Java-Scheduler wie Quartz Scheduler und Springs `@Scheduled` Ihr Ziel — aber die Zeitplandefinitionen lassen sich nicht direkt auf Linux-cron übertragen.
    Warum läuft '0 0 1 * 5' an jedem Freitag UND am 1.?
    Das ist die OR-Semantik für Tag des Monats / Wochentag in POSIX-cron und die mit Abstand häufigste Cron-Überraschung. Die Regel: Wenn BEIDE Felder eingeschränkt sind (keines ist `*`), läuft cron den Job, wenn EINE VON BEIDEN Bedingungen zutrifft — nicht beide. `0 0 1 * 5` (Tag des Monats=1, Wochentag=5) feuert also am 1. jedes Monats UND an jedem Freitag, nicht nur an Freitagen, die zufällig auf den 1. fallen. Wenn Sie nur Letzteres wollten (AND-Semantik — Freitag-der-1.), lässt sich das in Standard-cron nicht ausdrücken; Sie bräuchten ein Skript, das jeden Freitag ODER am 1. läuft und basierend auf dem tatsächlichen Datum frühzeitig beendet. Vixie cron (der GNU/Linux-Standard), BSD cron und AWS EventBridge folgen alle dieser OR-Regel. Die Vorschau der nächsten Läufe in diesem Tool macht den tatsächlichen Zeitplan offensichtlich — fügen Sie verdächtige Ausdrücke ein und prüfen Sie sie vor dem Deployment.
    Wie lasse ich einen Job alle 30 Sekunden laufen?
    Mit Standard-POSIX-cron geht das nicht. Die kleinste Granularität von cron ist eine Minute — das kleinste Feld ist Minute (0-59). Für Sub-Minuten-Zeitpläne haben Sie folgende Optionen: (1) Zwei Jobs auf `* * * * *` und `* * * * *` mit vorangestelltem `sleep 30 &&` bei einem laufen lassen — grob, aber funktioniert für vixie cron. (2) Einen Scheduler mit Sekundenunterstützung verwenden, z. B. Quartz, Kubernetes CronJob mit einem eigenen Controller oder systemd-Timer mit `OnCalendar: *-*-* *:*:00/30`. (3) Einen langlebigen Daemon laufen lassen, der zwischen Iterationen 30 Sekunden schläft — für die meisten Monitoring-Anforderungen die richtige Antwort. (4) Auf einen ereignisgesteuerten Trigger umstellen (Webhook, Message Queue), wenn Sie tatsächlich Echtzeitreaktion brauchen. Das 30-Sekunden-cron-Muster ist fast immer ein Hinweis darauf, dass cron die falsche Abstraktion ist.
    Welche Zeitzone verwendet cron?
    Auf einem Linux-Server verwendet vixie cron die System-Zeitzone — üblicherweise über `/etc/timezone` oder die Umgebungsvariable `TZ` gesetzt. Das ist eine häufige Bug-Quelle: Ein cron um 09:00 auf einem US-East-Server feuert um 14:00 UTC, aber auf einem auf UTC eingestellten Server um 09:00 UTC (d. h. 04:00 US East). Die Lösung ist, Server immer auf UTC zu setzen und alle Cron-Ausdrücke in UTC zu schreiben, oder die Variable `CRON_TZ=America/New_York` an den Anfang der crontab zu setzen, um die Zeitzone explizit zu fixieren (unterstützt von vixie cron 3.0+). Managed Scheduler variieren: GitHub Actions läuft immer in UTC, AWS EventBridge unterstützt Zeitzone in der Zeitplandefinition, Kubernetes CronJob hat in 1.27+ ein Feld `spec.timeZone` ergänzt. Der UTC/Lokal-Toggle dieses Tools lässt Sie den Zeitplan in beiden Zeitzonen vorab anzeigen — wechseln Sie zwischen ihnen, um zu bestätigen, dass der Lauf dort landet, wo Sie beabsichtigt haben.
    Worauf expandiert '*/15' eigentlich?
    Der Schrittoperator `*/N` bedeutet „alle N, beginnend beim niedrigsten gültigen Wert des Felds". Für Minute (Bereich 0-59) expandiert `*/15` zu `0,15,30,45` — vier Läufe pro Stunde zur Viertelstunde. Der Schritt ist NICHT „alle 15 Minuten ab dem aktuellen Zeitpunkt"; er ist am Startwert des Feldes verankert. Dieselbe Logik für andere Felder: `*/2` in Stunde bedeutet `0,2,4,...,22` (12 Läufe); `*/3` in Tag des Monats bedeutet `1,4,7,...,31` (11 Läufe). Bei Schrittbasen ohne Platzhalter (z. B. `5/15`) ist die Expansion ab der Basis: `5/15` in Minute = `5,20,35,50`. Schrittwerte, die den Bereich nicht gleichmäßig teilen, überspringen am Rollover — das ist korrektes Cron-Verhalten, kein Bug. Die Vorschau der nächsten Läufe macht den tatsächlichen Zeitplan offensichtlich.
    Kann ich einen Sechs-Feld-Ausdruck mit Sekunden verwenden?
    Sechs-Feld-Ausdrücke mit vorangestelltem Sekundenfeld (Bereich 0-59) sind eine Erweiterung von Quartz/Spring/Cron4j, nicht POSIX. Dieses Tool akzeptiert Sechs-Feld-Ausdrücke, wenn die Eingabe genau sechs durch Leerzeichen getrennte Tokens hat — nützlich, wenn Sie auf Quartz, Spring `@Scheduled(cron=...)` oder Node.js-Bibliotheken wie `node-cron` zielen, die Sekunden unterstützen. Für Standard-POSIX-Scheduler (Linux crontab, GitHub Actions, AWS EventBridge, Kubernetes CronJob) bleiben Sie bei fünf Feldern — ein vorangestelltes Sekundenfeld bricht den Zeitplan stillschweigend (der Scheduler interpretiert Ihre Minute als Sekunden, Ihre Stunde als Minute usw. und verschiebt alles um eins). Im Zweifel die Doku des Ziel-Schedulers prüfen; wenn dort nicht ausdrücklich „six-field with seconds is supported" steht, verwenden Sie fünf Felder.
    Welches maximale Intervall kann cron ausdrücken?
    Ohne externen Zustand kann cron zuverlässig bis zu einmal pro Jahr ausdrücken mit `0 0 D M *` (z. B. `0 0 1 1 *` = jeden 1. Januar um Mitternacht). Für „alle zwei Jahre" oder längere Intervalle reicht cron allein nicht — Sie bräuchten eine externe Datumsprüfung am Anfang Ihres Skripts (z. B. `[ $(($(date +%Y) % 2)) -eq 0 ] && /your-command`, um in geraden Jahren zu laufen). Für „alle 90 Tage" oder andere nicht ausgerichtete Mehrtagesintervalle scheitert cron ebenfalls: Es gibt keinen nativen Modulo-Tag-Operator, also würden Sie einen Wrapper schreiben, der den Tag des Jahres gegen ein Referenzdatum prüft. Wenn Ihre Scheduling-Anforderungen so komplex sind, ziehen Sie einen echten Workflow-Scheduler in Betracht (Airflow, Temporal, AWS Step Functions) — die Grammatik von cron ist absichtlich einfach und versagt bei allem jenseits regelmäßiger Wochen-/Monatsmuster.
    Wie gehe ich mit verpassten Läufen nach Ausfallzeiten um?
    Standard-cron hat keine Wiederherstellung — wenn das System zum geplanten Zeitpunkt ausgefallen war, wird der Lauf einfach übersprungen. Es gibt kein Protokoll mit „diesen haben wir verpasst". Für kritische Jobs haben Sie drei Optionen: (1) `anacron` verwenden (oder `systemd-cron` mit `Persistent=true`), das verpasste Jobs nach dem Booten nachholt, geeignet für Laptops und intermittierende Systeme. (2) Auf einen Scheduler mit eingebautem Retry umstellen: Kubernetes CronJobs haben `startingDeadlineSeconds` (Lauf bei Verzögerung innerhalb der Deadline) und `concurrencyPolicy` (überlappende Läufe vermeiden); AWS EventBridge unterstützt Retry-Policies. (3) Idempotenz in den Job selbst einbauen: statt „Bericht um 9 Uhr verschicken" lassen Sie den Job abfragen „wurde der heutige Bericht erzeugt?" und ihn erzeugen, falls nicht — das heilt sich selbst nach jeder Ausfallzeit. Option 3 ist am robustesten und funktioniert mit jedem Scheduler.
    Warum läuft mein GitHub-Actions-cron nicht pünktlich?
    GitHub-Actions-Zeitpläne sind Best-Effort: Sie können unter hoher Last auf GitHubs Infrastruktur mehrere Minuten zu spät feuern und bei sehr hoher Last komplett übersprungen werden (besonders bei kurzen Intervallen wie alle fünf Minuten). Derselbe Hinweis gilt für die meisten Managed Scheduler — sie tauschen exaktes Timing gegen Skalierung und Zuverlässigkeit. Praktische Konsequenzen: (1) Planen Sie nichts, das auf die Sekunde genau laufen muss; cron ist für „ungefähr zu dieser Zeit, täglich". (2) Bei kurzen Intervallen bevorzugen Sie einen langlebigen Worker gegenüber einem geplanten Job. (3) Für exakte Zeitpunkte bei Finanz- oder Compliance-Stichtagen nutzen Sie einen dedizierten Cron-Daemon auf einem Server, den Sie kontrollieren, oder einen strengeren Scheduler wie AWS EventBridge Scheduler mit Standard schedule. (4) Speziell für GitHub Actions: Vermeiden Sie Intervalle kürzer als 15 Minuten; der Scheduler überspringt sie unter Last häufig.

    Verwandte Werkzeuge

    Alle Werkzeuge anzeigen →