Cron-Syntax erklärt: Die 5 Felder meistern
Die Fünf-Feld-Syntax von Cron ist täuschend einfach, aber unglaublich mächtig. Dieser Leitfaden zerlegt jedes Feld, jedes Sonderzeichen und die Regeln, die bestimmen, wie sie kombiniert werden, um Zeitpläne von 'jede Minute' bis 'zweiter Dienstag ungerader Monate um 3:47 Uhr' zu erstellen.
Die fünf Felder
Jeder Cron-Ausdruck besteht aus genau fünf Feldern in einer bestimmten Reihenfolge: Minute Stunde Tag-des-Monats Monat Wochentag. Das Verständnis, was jedes Feld steuert und welchen gültigen Bereich es hat, ist für die Konstruktion korrekter Ausdrücke unverzichtbar.
Das Minutenfeld (0-59) steuert, in welcher Minute der Stunde der Job läuft. "0" bedeutet zur vollen Stunde (:00), "30" bedeutet zur halben Stunde (:30), und "*" bedeutet jede Minute. Dies ist die granularste Kontrolle, die Cron bietet - Sie können Jobs nicht in Sub-Minuten-Intervallen mit Standard-Cron planen.
Das Stundenfeld (0-23) verwendet 24-Stunden-Zeit. "0" ist Mitternacht, "12" ist Mittag und "23" ist 23 Uhr. Es gibt keine AM/PM-Notation; Cron versteht nur 24-Stunden-Format. Wenn Sie 14 Uhr möchten, verwenden Sie "14". Wenn Sie 2 Uhr möchten, verwenden Sie "2" (oder "02", führende Nullen sind optional und werden ignoriert).
Das Tag-des-Monats-Feld (1-31) gibt an, an welchem Tag(en) des Monats ausgeführt werden soll. "1" ist der erste des Monats, "15" ist die Mitte und "31" ist der letzte Tag für Monate mit 31 Tagen. Seien Sie vorsichtig mit Daten 29-31, da nicht alle Monate diese Tage haben. Ein Job, der für den 31. geplant ist, wird in Monaten mit nur 30 Tagen nicht ausgeführt.
Das Monatsfeld (1-12) steuert, in welchen Monaten der Job ausgeführt wird. "1" ist Januar, "12" ist Dezember. Einige Cron-Implementierungen akzeptieren dreistellige Monatsabkürzungen wie "jan" oder "JAN", aber numerische Werte werden universell unterstützt und sind für Portabilität empfohlen.
Das Wochentagsfeld (0-6 oder 1-7, je nach Implementierung) gibt an, an welchen Wochentagen ausgeführt werden soll. Standard-Cron verwendet 0 für Sonntag, 1 für Montag bis 6 für Samstag. Einige Implementierungen akzeptieren auch 7 für Sonntag, was sowohl 0 als auch 7 für Sonntag gültig macht. Wie Monate akzeptieren einige Cron-Varianten Abkürzungen (sun, mon, tue usw.), aber numerische Werte sind am sichersten.
Das Verständnis, wie diese Felder interagieren, ist entscheidend. Wenn sowohl Tag des Monats als auch Wochentag angegeben sind (keine Wildcards), läuft der Job, wenn eine der Bedingungen wahr ist (ODER-Logik, nicht UND). Dies verwirrt viele Benutzer, die erwarten, dass "0 0 13 * 5" "am Freitag, dem 13." läuft, wenn es tatsächlich "am 13. jeden Monats ODER jeden Freitag" läuft.
Sonderzeichen und Operatoren
Die Kraft von Cron kommt von Sonderzeichen, die es Ihnen ermöglichen, komplexe Zeitpläne prägnant auszudrücken. Das Sternchen (*) bedeutet "jeder mögliche Wert" und ist das häufigste Sonderzeichen. Im Minutenfeld bedeutet * jede Minute (0-59). Im Monatsfeld bedeutet * jeden Monat (1-12).
Der Komma-Operator (,) listet mehrere spezifische Werte auf. "0,15,30,45" im Minutenfeld läuft um :00, :15, :30 und :45 jeder Stunde. "1,15" im Tag-des-Monats-Feld läuft am 1. und 15. Sie können so viele Werte auflisten, wie Sie benötigen: "1,3,5,7,9,11" für ungerade Tage.
Der Bindestrich (-) erstellt Bereiche aufeinanderfolgender Werte. "1-5" im Wochentagsfeld bedeutet Montag bis Freitag. "9-17" im Stundenfeld bedeutet 9 Uhr bis 17 Uhr. Bereiche sind einschließlich - beide Endpunkte sind enthalten. "1-3" bedeutet 1, 2 und 3.
Der Schrägstrich (/) erstellt Schrittwerte oder Intervalle. Das Format ist "*/N" oder "Bereich/N". "*/5" im Minutenfeld bedeutet "alle 5 Minuten" (0, 5, 10, 15, ..., 55). "*/2" im Stundenfeld bedeutet "alle 2 Stunden" (0, 2, 4, 6, ..., 22). Sie können Schritte mit Bereichen kombinieren: "10-50/5" bedeutet 10, 15, 20, 25, 30, 35, 40, 45, 50.
Diese Operatoren können in einem einzigen Feld kombiniert werden. "1-5,10,15,20-25" ist gültig und gibt 1 bis 5, 10, 15 und 20 bis 25 an. "*/10,55" bedeutet alle 10 Minuten plus spezifisch um :55 (also 0, 10, 20, 30, 40, 50, 55).
Einige erweiterte Cron-Implementierungen unterstützen zusätzliche Sonderzeichen. "L" (last) im Tag des Monats bedeutet den letzten Tag des Monats. "W" (weekday) findet den nächsten Wochentag zu einem bestimmten Datum. "#" gibt das N-te Vorkommen eines Tages an (wie "2. Dienstag"). Diese Erweiterungen sind mächtig, aber nicht universell unterstützt - Standard-Cron enthält sie nicht.
Das Fragezeichen (?) erscheint in einigen Cron-Implementierungen als Alias für "*" in Tag-des-Monats- oder Wochentagsfeldern. Es existiert hauptsächlich zur Klarheit: die Verwendung von "?" in einem Feld und einem spezifischen Wert im anderen macht deutlich, dass Sie nur ein Tagestyp-Feld einschränken. Standard-Cron unterstützt "?" nicht; verwenden Sie stattdessen "*".
Das Verständnis von Operator-Vorrang und Kombinationsregeln verhindert Syntaxfehler. Bereiche müssen aufsteigend sein (1-5, nicht 5-1). Schrittwerte müssen positiv sein. Listen sollten Werte innerhalb des gültigen Bereichs des Feldes haben. Die meisten Cron-Implementierungen validieren Ihre Syntax nicht bis zur Ausführung, also ist Testen entscheidend.
Häufige Syntaxmuster
Die Beherrschung einiger häufiger Syntaxmuster deckt die Mehrheit der realen Planungsanforderungen ab. Diese Bausteine können für fast jeden Zeitplan kombiniert und angepasst werden.
Für einfache regelmäßige Intervalle verwenden Sie Schrittsyntax: "*/N * * * *" läuft alle N Minuten. "0 */N * * *" läuft alle N Stunden (bei Minute 0). Dieses Muster ist üblich für Überwachung, API-Abfragen oder periodische Aufräumaufgaben.
Für tägliche Jobs zu bestimmten Zeiten verwenden Sie "M H * * *", wobei M die Minute und H die Stunde ist. "0 2 * * *" läuft um 2:00 Uhr täglich. "30 14 * * *" läuft um 14:30 Uhr täglich. Die Wildcards in Monats- und beiden Tagesfeldern bedeuten "jeden Tag".
Für reine Wochentagsjobs verwenden Sie "M H * * 1-5". "0 9 * * 1-5" läuft um 9 Uhr Montag bis Freitag. Dieses Muster ist unverzichtbar für Geschäftstag-nur-Aufgaben wie das Versenden von Wochentagsberichten oder das Ausführen von Integrationen mit externen Geschäftssystemen, die nur an Wochentagen arbeiten.
Für bestimmte Wochentage verwenden Sie "M H * * D", wobei D 0-6 ist. "0 0 * * 0" läuft sonntags um Mitternacht. "0 18 * * 5" läuft freitags um 18 Uhr. Mehrere Tage funktionieren auch: "0 8 * * 1,3,5" läuft montags, mittwochs und freitags um 8 Uhr.
Für monatliche Jobs verwenden Sie "M H D * *", wobei D der Tag des Monats ist. "0 0 1 * *" läuft am ersten jeden Monats um Mitternacht. "0 12 15 * *" läuft am 15. jeden Monats um 12 Uhr, perfekt für Mitte-Monats-Verarbeitung.
Für bestimmte Monate oder Jahreszeiten fügen Sie Monatsspezifikation hinzu: "M H D M *". "0 0 1 1 *" läuft jährlich am 1. Januar. "0 0 1 1,4,7,10 *" läuft vierteljährlich. "0 0 1 6-8 *" läuft am ersten von Juni, Juli und August (Sommermonate).
Für komplexe Zeitpläne kombinieren Sie Operatoren kreativ. "0 9-17/2 * * 1-5" läuft um 9, 11, 13, 15 und 17 Uhr an Wochentagen - alle 2 Stunden während der Geschäftszeiten. "*/15 9-17 * * 1-5" läuft alle 15 Minuten, aber nur während der Geschäftszeiten an Wochentagen.
Wenn Sie einen Zeitplan benötigen, der nicht zu diesen Mustern passt, zerlegen Sie ihn in Komponenten. Denken Sie darüber nach, wann er laufen soll (Zeit), wie oft (Intervall), welche Tage (Wochentag), welche Daten (Tag des Monats) und welche Monate (Monat). Konstruieren Sie dann jedes Feld entsprechend diesen Einschränkungen.
Tool ausprobieren
Crontab Generator