Der schlimmste Produktionsfehler, den ich je verursacht habe, war ein Charakter in einem Cron-Ausdruck Ich wollte, dass jede Nacht um Mitternacht ein Datenbank-Backup läuft Ich schrieb 0 0 * * * In meinem Kopf, getippt 0 0 * * 0 In die crontab, und weiter ging's. Der Job lief einmal - am darauffolgenden Sonntag - und dann eine Woche lang nicht mehrIch habe es herausgefunden, wenn ich ein Backup brauchte, das nicht existierte Diese einzelne fehlplatzierte Ziffer drehte " jeden Tag" in " jeden Sonntag, " und nichts in der Syntax warnte mich Cron macht genau das, was Sie ihm sagen, still, für immer.
tl; dr: der Cron-Expression-Generator Erstellen Sie einen Standard-Fünffeld-Crontab-Ausdruck aus einfachen Feldern oder Ein-Klick-Voreinstellungen, erklären Sie ihn in einem Satz, während Sie tippen, und geben Sie eine Vorschau auf die nächsten Laufzeiten in UTC, damit Sie den Zeitplan bestätigen können, bevor er die Produktion erreicht Es läuft vollständig in Ihrem Browser - kein Konto, kein Upload.
Ich habe dieses Tool für Toolz.dev gebaut, weil ich nie wieder einen Zeitplan festlegen wollte, den ich nur in meinem Kopf überprüft hatte. Wenn ich einen Kronenausdruck als einfaches Englisch zurücklese und sehe, an welchen tatsächlichen Daten er ausgelöst wird, fängt das 0 -versus- * Klasse des Fehlers sofort Diese Anleitung behandelt, wie die Cron-Syntax funktioniert, die Interaktionen, die fast jeden auslösen, und wie man den Generator verwendet, um einen Ausdruck zu erzeugen, dem man vertrauen kann.
Was ist ein Kronenausdruck?
Ein Cron-Ausdruck ist ein kompakter Zeitplan aus fünf durch Leerzeichen getrennten Feldern, von links nach rechts sind es Minute, Stunde, Tag des Monats, Monat und Wochentag Die Fünf-Felder-Form wird durch POSIX im crontab-Eintragsformat. Ein Scheduler - das klassische Unix cron Daemon, aber auch CI-Systeme, Kubernetes CronJobs, und unzählige Task Runner - liest den Ausdruck und feuert in jedem Moment Ihren Job, der zu allen Feldern passt.
Jedes Feld akzeptiert mehr als eine einzelne Zahl Ein Stern (*) bedeutet & quot;every" Wert dieses Feldes Eine Liste wie 1,15,30 Bedeutet mehrere spezifische Werte Ein Bereich wie 1-5 Bedeutet eine inklusive Spanne Ein Schritt wie */15 Bedeutet & quot; jedes Fünfzehnte" Wert ausgehend vom Feld' s Minimum. Man kombiniert diese über die fünf Felder, um fast jeden wiederkehrenden Zeitplan zu beschreiben: jede Minute, jede Viertelstunde, Wochentage um 8 Uhr, der erste eines jeden Monats, der letzte Quartal' s Eröffnungstag. Die Leistung ist real, und die Dichte auch - fünf Felder können einen überraschend präzisen Zeitplan kodieren, genau deshalb sind sie leicht subtil falsch zu liegen.
Hier ist das Feldlayout, das der Generator verwendet, mit dem jeweils gültigen Bereich:
| Position | Feld | Reichweite | Notizen |
|---|---|---|---|
| 1 | minuti | 0–59 | |
| 2 | Stunde | 0–23 | 24-stunden-uhr |
| 3 | Tag des Monats | 1–31 | |
| 4 | Monat | 1 12 | JAN–DEC Auch akzeptiert |
| 5 | Wochentag | 0 – 6 | 0 und 7 bedeuten beide Sonntag; SUN–SAT Angenommen |
Warum den Ausdruck generieren, anstatt ihn von Hand zu schreiben
Cron per Hand zu schreiben ist eine Wette, dass Sie sich die Feldreihenfolge, die Bereiche und die Interaktionen richtig gemerkt haben, ohne Rückmeldung, bis der Auftrag ausgeführt wird oder scheitert. Der Generator ersetzt diese Wette durch Bestätigung. Wenn Sie die Felder ausfüllen, erledigt er drei Dinge auf einmal.
Zunächst wird der Ausdruck zusammengestellt und validiert, wobei Werte außerhalb des Bereichs, umgekehrte Bereiche und fehlerhafte Schritte mit einer Nachricht erfasst werden, die das betreffende Feld benennt. Ein Ausdruck wie 0 25 * * * - Stunde 25 existiert nicht - wird mit einer Erklärung abgelehnt, anstatt akzeptiert zu werden, und läuft stillschweigend nie.
Zweitens wird der Zeitplan als Satz wiedergegeben. 0 8 * * 1-5 Wird " Um 08:00 Uhr von Montag bis Freitag." Das Lesen des Zeitplans in Worten ist der schnellste Weg, um zu bemerken, dass das, was Sie gebaut haben, nicht das ist, was Sie gemeint haben. Mein Mitternachts-Backup-Bug wäre sofort offensichtlich gewesen, als ich " um 00:00 Uhr gelesen habe Sonntag" statt " Um 00:00 Uhr."
Drittens gibt es eine Vorschau auf die tatsächlichen bevorstehenden Laufzeiten. Zu sehen, dass ein Job das nächste Mal in drei Monaten statt heute Abend entlassen wird, zeigt Ihnen, dass etwas weitaus deutlicher nicht stimmt, als auf Sternchen zu starren. Diese Vorschau fängt auch unmögliche Zeitpläne ein - fragen Sie nach dem 30. Februar und der Generator zeigt überhaupt keine bevorstehenden Läufe an, weil es keine gibt.
So verwenden Sie den Cron Expression Generator
Schritt 1: Beginnen Sie mit einer Voreinstellung oder einem leeren Blatt
Der schnellste Weg zu einem korrekten Ausdruck ist, von einem zu beginnen, der bereits nahe ist Wählen Sie eine Voreinstellung wie & quot; Wochentage um 8 Uhr, & quot; & quot; alle 15 Minuten, & quot; oder & quot; First of month at midternight, " und die Felder laden bereit, sich anzupassen Wenn keine passt, beginnen Sie von der jede-Minute-Voreinstellung und bearbeiten Sie Presets existieren, weil die meisten realen Zeitpläne Variationen von einem Dutzend gängiger Muster sind, und ausgehend von einem bekannten-guten Ausdruck eliminiert eine ganze Kategorie von Fehlern.
Schritt 2: Legen Sie die fünf Felder fest
Geben Sie in jedes Feld einen Wert ein oder belassen Sie ihn als * Für & quot;every." akzeptiert jedes Feld einen einzelnen Wert, eine Kommaliste, einen Bindestrichbereich oder einen Schrägstrichschritt. Um beispielsweise zu jeder vollen Stunde während der Geschäftszeiten an Wochentagen zu laufen, stellen Sie Minute auf 0Stunde bis 9-17und Wochentag bis 1-5Tag des Monats und Monat belassen als *. Der Hinweis unter jedem Feld erinnert Sie an seinen gültigen Bereich, sodass Sie sich die Reihenfolge nicht merken müssen.
Schritt 3: Lesen Sie die einfache englische Beschreibung
Sehen Sie sich das Beschreibungsupdate an, während Sie tippen. Das ist der Schritt, der Sie speichert. Wenn der Satz nicht mit dem Zeitplan in Ihrem Kopf übereinstimmt, ist der Ausdruck falsch, und Sie haben es eine Woche später im Browser statt in der Produktion herausgefunden Bestätigen Sie die Uhrzeit, die Tage und jede Monatsbeschränkung so, wie Sie es beabsichtigen.
Schritt 4: Überprüfen Sie die nächsten Durchläufe und kopieren Sie
Klicken Sie, um eine Vorschau der kommenden Laufzeiten anzuzeigen, berechnet in UTC. Scannen Sie sie auf etwas Überraschendes - eine zu lange Lücke, einen zu weit entfernten ersten Lauf oder eine leere Liste, die ein unmögliches Datum signalisiert. Wenn der Zeitplan richtig aussieht, kopieren Sie den Ausdruck und fügen Sie ihn in Ihre Crontab-, Pipeline- oder CronJob-Manifestation ein.
Die Tag-Monat - und Wochentag-Falle
Wenn Sie sich an eine Sache über Cron erinnern, machen Sie es so, denn es überrascht fast jeden beim ersten Mal Wann beide Das Tag-des-Monats-Feld und das Tag-der-Woche-Feld sind eingeschränkt - das heißt, keines ist es * - standard cron kombiniert sie mit OR, nicht UND. Der Job läuft, wenn entweder Zustand übereinstimmt.
Also 0 0 13 * 5 Bedeutet nicht & quot; mitternacht am freitag der 13. " es bedeutet " mitternacht am 13. eines jeden monats, und auch mitternacht an jedem freitag." das sind sehr unterschiedliche zeitpläne; die zweite feuert viele male im monat Dieses verhalten kommt direkt aus der ursprünglichen vixie cron-implementierung, die die meisten scheduler erben, und der generator ehrt es genau seine nächste laufvorschau zeigt ihnen sowohl die 13 te als auch die freitage, was die klarste möglichkeit ist, einen unbeabsichtigten or zu fangen.
Die praktische Regel: lassen Sie eines der beiden Tagesfelder als * Es sei denn, Sie wollen wirklich das Verhalten ODER Wenn Sie wirklich brauchen & quot; Freitag der 13. nur, & quot; cron kann es nicht in einem Ausdruck ausdrücken - Sie handhaben diese Logik in Ihrem Job Sehen Sie die tatsächlichen Laufdaten in der Vorschau ist, was dies von einem lauernden gotcha in eine offensichtliche, sichtbare Tatsache verwandelt.
Schritte, Bereiche und Listen in der Praxis
In der Schritt-Syntax lebt viel Planungsmacht und es beginnt viel Verwirrung. */5 Im Minutenfeld bedeutet Minuten 0, 5, 10, 15, und so weiter zu 55 - & quot; alle fünf Minuten." Sie können einen Schritt in einem Bereich verankern: 0-30/10 Bedeutet nur Minuten 0, 10, 20, und 30. Ein nackter Wert mit einem Schritt, wie 5/15 Im Minutenfeld bedeutet " beginnend bei 5, alle 15" bis zum Feldmaximum - 5, 20, 35, 50.
Listen und Sortimente lassen sich frei kombinieren. 1,4,7,10 Im Monatsfeld erhalten Sie einen vierteljährlichen Zeitplan - Januar, April, Juli, Oktober. 1-5 Tag der Woche gibt Ihnen Montag bis Freitag. 9-17 Im Stundenfeld erhält man ein Fenster von neun bis fünf. Mischen, die 0 9-17 * * 1-5 Liest als & quot; in Minute 0 jeder Stunde von 9 Uhr bis 5 Uhr, Montag bis Freitag" - ein üblicher Business-Hours-Herzschlag Der Generator erweitert und validiert all dies, und die Beschreibung legt dar, was Sie gebaut haben, sodass beispielsweise keine Unklarheiten darüber bestehen, ob ein Bereich inklusiv ist (es ist).
Häufige Anwendungsfälle
Geplante Backups und Wartung. Der kanonische Cronjob. Generieren 0 2 * * * Für eine nächtliche 2 Uhr morgens Backup, lesen Sie die Beschreibung, um zu bestätigen, dass es täglich und nicht wöchentlich ist, und Vorschau der nächsten Läufe, um sicher zu sein, dass der erste heute Abend ist Dies ist der genaue Fehler, den ich vor Jahren gemacht habe, und der genaue, den die Vorschau verhindert.
CI- und Bereitstellungspläne. Nightly Builds, geplante Testläufe und periodische Bereitstellungen verwenden alle die Cron-Syntax in GitHub Actions, GitLab CI und ähnlichen Systemen. Erstellen Sie den Ausdruck hier, bestätigen Sie ihn und fügen Sie ihn in Ihre Workflow-Datei ein. Da diese Systeme auf ihren eigenen Servern laufen, beachten Sie die Zeitzonenvorbehalte unten.
Datenpipelines und Berichte. Ein wöchentlicher Bericht jeden Montag um 6 Uhr ist 0 6 * * 1; eine monatliche Aufrollung auf die erste ist 0 0 1 * *; ein vierteljährlicher Job ist 0 0 1 1,4,7,10 *. Diese zu generieren und sie wieder zu lesen, stoppt den klassischen & quot; am falschen Tag." Pipeline-Vorfall.
Cache-Erwärmung und Herzschläge. Hochfrequenzjobs wie */5 * * * * Halten Sie Caches warm oder die Gesundheitschecks ticken Die Vorschau bestätigt, dass das Intervall das ist, was Sie erwarten, und nicht beispielsweise einmal pro Stunde, weil Sie den Schritt in das falsche Feld setzen.
Lerncron. Wenn Sie noch die Intuition aufbauen, ist der Generator ein Lehrmittel Geben Sie einen Ausdruck ein, lesen Sie den Satz, sehen Sie die Durchläufe, und die Zuordnung zwischen Syntax und Verhalten wird auf eine Weise konkret, die Dokumentation allein nie schafft.
Eine Anmerkung zu den Zeitzonen
Die Vorschau für den nächsten Lauf berechnet Zeiten in UTC, so dass das Ergebnis deterministisch ist und für alle, die dies lesen, gleich Echte Cron-Daemons laufen jedoch in der lokalen Zeitzone von server' s, sofern nicht anders konfiguriert, und CI-Anbieter haben jeweils ihre eigene Konvention - viele Standardangaben für UTC, einige nicht Der Ausdruck selbst trägt keine Zeitzone; es ist der Scheduler, der entscheidet Wenn Sie also einen Ausdruck von diesem Tool in ein Live-System verschieben, bestätigen Sie, dass system' Zeitzone und setzen Sie die Laufzeiten in Ihrem Kopf entsprechend um A 0 0 * * * Job ist Mitternacht - aber Mitternacht wohin Kommt ganz darauf an, wo der Job läuft Wenn man sich über Timezone Offsets Gedanken machen muss, wird die Zeitzonenwandler Handlich ist, und die Zeitstempelwandler Hilft, wenn Ihr Scheduler protokolliert als Unix-Zeitstempel läuft.
Generieren versus Parsen eines Ausdrucks
Dieses Tool baut einen Ausdruck aus Feldern auf Sein Geschwister, die Cron-Expression-ParserGeht in die andere Richtung: einen vorhandenen Ausdruck einfügen und er erklärt ihn und gibt eine Vorschau auf seine Läufe Die beiden decken die beiden Richtungen desselben Problems ab Verwenden Sie den Generator, wenn Sie den gewünschten Zeitplan kennen und die Syntax benötigen; verwenden Sie den Parser, wenn Sie einen Ausdruck geerbt haben und verstehen müssen, was er bewirkt Beide ehren dieselbe Vixie-cron-Semantik, einschließlich der Tag-Monat-ODER-Wochentag-Regel, sodass die Beschreibung, die Sie in einem lesen, mit dem Verhalten übereinstimmt, das Sie in dem anderen sehen würden Zusammen sind sie ein kleines, fokussiertes Paar innerhalb des breiteren Kits, das ich in dem beschreibe Webentwickler-Toolkit Überblick und die breitere Anleitung für die Coding-Toolsdrohen
Privatsphäre: alles läuft in Ihrem Browser
Hier gibt es nichts hochzuladen, und es wird nichts hochgeladen Der Ausdruck wird vollständig in clientseitigem Code erstellt, validiert, beschrieben und simuliert. Das ist wichtiger, als es den Anschein hat: Interne Jobpläne können Dinge über ein System preisgeben's Architektur und Kadenz, die Sie nicht in einem Dritten sitzen möchten's Protokolle Sie können bestätigen, dass das Tool in sich abgeschlossen ist, indem Sie die Verbindung zum Internet trennen - es funktioniert weiter Dies ist das gleiche clientseitige Prinzip hinter jedem Tool auf Toolz.dev, für das ich in vollem Umfang plädiere Datenschutz in Online-Tools Artikel.
FAQ
Wie schreibe ich einen Cron-Ausdruck?
Ein Standard-Cron-Ausdruck hat fünf Felder, die durch Leerzeichen getrennt sind: Minute, Stunde, Tag des Monats, Monat und Wochentag Jedes Feld ist ein bestimmter Wert, eine Liste, ein Bereich, ein Schritt oder * Für jeden. zum Beispiel 0 8 * * 1-5 Bedeutet Montag bis Freitag um 08:00. Dieses Tool erstellt den Ausdruck für Sie und zeigt unterwegs, was es bedeutet.
Was bedeuten die fünf Cron-Felder?
Von links nach rechts sind es Minute (059), Stunde (0 23), Tag des Monats (1 –31), Monat (1 12) und Wochentag (0 –6, wobei 0 und 7 beide Sonntag bedeuten).Ein Stern in einem Feld bedeutet & quot;every" Wert dieses Feldes Das Werkzeug beschriftet jedes Feld, sodass Sie sich nicht an die Reihenfolge erinnern müssen.
Was macht */5 Mittelwert in Kronen?
Der Schrägstrich führt einen Schrittwert ein Im Minutenfeld, dem */5 Mittel & quot; alle 5 Minuten" - 0, 5, 10, 15, und so weiter Sie können Schritte mit Bereichen auch kombinieren: 0-30/10 Im Minutenfeld bedeutet Minuten 0, 10, 20, und 30. Schritte sind die Standardmethode, um & quot; alle N Einheiten auszudrücken."
Warum läuft mein Job öfter als erwartet mit dem Monatstag und dem Wochentag?
Das ist die häufigste Cron-Überraschung Wenn sowohl das Tag-Monat - als auch das Tag-Woche-Feld eingeschränkt sind (ist auch keines *), Standard-Cron behandelt sie als ODER, nicht ALS UND - der Job läuft, wenn eine der beiden Bedingungen übereinstimmt. Also 0 0 13 * 5 Läufe am 13. des Monats und jeden Freitag, nicht nur am Freitag, den 13. Lassen Sie ein Feld als * Es sei denn, Sie wollen wirklich das ODER-Verhalten.
In welcher Zeitzone werden die nächsten Laufzeiten angezeigt?
Die Vorschau berechnet kommende Läufe in UTC, sodass das Ergebnis für alle gleich ist Echte Cron-Daemons verwenden die Server-Zeitzone (oder eine TZ-Einstellung).Wenn Ihr Server also in einer anderen Zone läuft, versetzen Sie die Zeiten entsprechend. Der Ausdruck selbst trägt keine Zeitzone - es ist der Scheduler, der entscheidet.
Kann ich Namen wie Mon oder Jan anstelle von Zahlen verwenden?
Ja. Das Monatsfeld akzeptiert JAN durchgehend DEC und das Wochentagsfeld akzeptiert SUN durchgehend SATFallunempfindlich Das Tool versteht sie bei der Validierung und Beschreibung Ihres Ausdrucks Numerische Werte sind über Scheduler hinweg portabler, so dass der Generator Zahlen aussendet, benannte Eingaben jedoch vollständig unterstützt werden.
Ist das dasselbe wie die crontab-Syntax?
Ja, dies generiert standardmäßige Fünf-Felder-Unix/Vixie-Cron, die von crontab, den meisten CI-Systemen und Kubernetes CronJobs verwendet werden. Einige Scheduler fügen ein Sechstsekundenfeld oder nicht standardmäßige Erweiterungen wie hinzu @reboot; diese sind nicht Teil des Fünf-Felder-Standards Für die überwiegende Mehrheit der Planungsanforderungen ist der Fünf-Felder-Ausdruck, den dieses Tool erzeugt, genau das, was Sie wollen.
Wird mein Zeitplan irgendwohin gesendet?
Nein. Der Ausdruck wird komplett in Ihrem Browser mit clientseitigem Code erstellt, validiert, beschrieben und simuliert, es wird nichts hochgeladen oder gespeichert. Das können Sie bestätigen, indem Sie die Verbindung zum Internet trennen - der Generator funktioniert immer noch.



