Entwicklertools · Crontab-Generator
Cron-Schritt- und Bereichssyntax: */15, 1-5, Listen und wie sie kombiniert werden
· Wie es funktioniert
Cron Planung Entwickler-Workflow
Schritte, Bereiche und Listen sind Teile der Cron-Syntax, die Menschen kopieren, ohne sie zu verstehen. In diesem Beitrag wird erklärt, wie sie sich nisten und es gibt Überraschungen wie */7, was nicht „alle sieben Tage“ bedeutet.
Alle 15 Minuten, aber nur 9 bis 5 – der naive Ausdruck wird auch nachts ausgelöst
„Alle fünfzehn Minuten während der Bürozeiten“ enthält zwei unabhängige Einschränkungen. Das Minutenfeld benötigt Viertelstundenmarkierungen, während das Stundenfeld eine begrenzte Spanne benötigt. Wenn Sie nur `*/15 * * * *` schreiben, wird die erste Hälfte gelöst und es werden trotzdem die ganze Nacht über Läufe erzeugt. Der Ausdruck muss beide Einschränkungen kodieren, bevor er etwas über Wochentage aussagt.
ToolAcre analysiert die fünf Zeitplanfelder, keinen Befehl. Beginnen Sie mit `*/15 9-17 * * 1-5`, überprüfen Sie dann den Satz und führen Sie als Nächstes eine Vorschau aus. Diese Prüfung fängt den häufigen Fehler auf, `9-17` an der Minutenposition zu platzieren oder das Wochentagsfeld uneingeschränkt zu lassen. Der Generator erstellt und erklärt einen Ausdruck; Es wird kein Job installiert oder ausgeführt.
Bereiche – 1-5 und 9-17 als inklusive Bereiche innerhalb eines einzelnen Felds
Ein Bindestrich erstellt einen umfassenden Bereich innerhalb eines Feldes. `9-17` in der Stundenposition wird auf neun Werte erweitert: 9 bis 17. Ebenso wird `1-5` an der Wochentagsposition auf Montag bis Freitag erweitert, da dieser Parser Sonntag auf 0, Montag auf 1 usw. zuordnet. Beide Endpunkte nehmen teil, sodass 17:00 innerhalb des ausgewählten Stundenbereichs liegt.
Bereiche können nicht über eine Feldgrenze hinweg umbrochen werden. Der Parser lehnt eine umgekehrte Form wie `17-9` ab und schlägt vor, die gewünschten Werte in zwei Listenelemente aufzuteilen. Diese Ablehnung ist nützlich, da die Verpackungsregeln je nach Planungsprodukt unterschiedlich sind. Hier verschiebt sich ein Bereich immer nach oben zwischen Werten, die bereits die numerischen oder zulässigen Namensgrenzen des Felds erfüllen.
Schritte – */15 und 9-17/2, und warum der Schritt an der Untergrenze des Felds neu beginnt, anstatt kontinuierlich zu zählen
Ein Schrägstrich wählt jeden n-ten Wert von einem Startpunkt aus. `*/15` im Minutenfeld beginnt bei seinem Minimum, Null, und wird auf 0, 15, 30 und 45 erweitert. `9-17/2` beginnt bei 9 und ergibt 9, 11, 13, 15 und 17. Der Schritt gehört zu einem Feld; Verstrichene Minuten über Stundengrenzen hinweg werden nicht gezählt.
Der Parser akzeptiert auch einen bloßen Start mit einem Schritt. `5/15` im Minutenfeld bedeutet 5, 20, 35 und 50, da der implizite obere Endpunkt 59 ist. Die Schritte müssen positive ganze Zahlen sein und dürfen die Größe des gesamten Feldbereichs nicht überschreiten. Ein Nullschritt, ein nicht numerischer Schritt oder ein übergroßer Schritt erhält einen feldspezifischen Validierungsfehler anstelle einer vermuteten Interpretation.
Listen können Werte, Bereiche und abgestufte Bereiche in einem Feld kombinieren
Kommas vereinen mehrere Teile innerhalb desselben Feldes. Ein einfacher `1,15,30` benennt drei Minutenwerte. Eine aufwändigere Eingabe kann einen Einzelwert, einen inklusiven Bereich und einen abgestuften Bereich kombinieren: Der getestete `0,10-20/5,59` wird auf 0, 10, 15, 20 und 59 erweitert. Doppelte Ergebnisse werden entfernt und die erweiterten Werte werden sortiert, bevor sie in späteren Berechnungen verwendet werden.
Diese Grammatik ist kompositorisch, aber dennoch eng. Jedes Kommaelement darf einen Schrägstrich enthalten und ein Bereich muss genau zwei nicht leere Endpunkte haben. Ein falsches Komma, mehrere Schrägstriche oder ein unvollendeter Bereich werden mit einer Begründung, die das Feld benennt, abgelehnt. Dadurch ist ein gemischter Ausdruck überprüfbar, ohne dass falsch formulierte Zeichensetzung eine konventionelle Bedeutung hätte.
Arbeitsbeispiel: */15 9-17 * * 1-5 – Aufzählung der erzeugten Minuten und des Randfalls 17:45
Für `*/15 9-17 * * 1-5` sind die Minutenwerte 00, 15, 30 und 45; die Stunden sind 09 bis 17; und die Wochentagswerte sind Montag bis Freitag. An jedem eingeschlossenen Wochentag ist der erste Kandidat 09:00 und der letzte ist 17:45. Es gibt kein 18:00, da 18 außerhalb des Stundenbereichs liegt.
Die letzte Kante veranschaulicht, warum die Felderweiterung die Konversationskurzschrift übertrifft. „Neun vor fünf“ könnte für einen Leser bedeuten, bei 17:00 anzuhalten und für einen anderen die volle Fünf-Uhr-Stunde einzubeziehen. Crons Stundenfeld wählt einen Stundenbereich aus, dann wählt das Minutenfeld Positionen darin aus. Wenn 17:45 unerwünscht ist, benötigt die gewünschte Grenze einen anderen Ausdruck oder eine andere befehlsseitige Logik.
Ein Tag-des-Monats-Schritts wird jeden Monat ab Tag 1 erweitert; Es handelt sich nicht um ein Intervall einer verstrichenen Woche
`*/7` im Tag des Monats erweitert sich vom Minimum dieses Felds von 1 und ergibt 1, 8, 15, 22 und 29, sofern diese Daten vorhanden sind. Wenn der nächste Monat beginnt, beginnt das Feld wieder bei 1. Es beschreibt daher ausgewählte Kalenderdaten und kein kontinuierlich fortschreitendes Sieben-Tage-Intervall. Im Februar und in den kürzeren Monaten fehlen einfach einige wichtige Termine.
Dieselbe Syntax hat einen anderen Startwert in einem anderen Feld. `*/7` Minuten beginnen bei 0, während `*/7` Tage im Monat bei 1 beginnen. Der Parser von ToolAcre leitet die Sequenz aus jeder Feldspezifikation ab und seine Vorschau durchsucht Kalenderdaten. Beschränken Sie für eine tatsächliche wöchentliche Kadenz den Wochentag, anstatt die Schrittweite des Monatstags als verstrichene Dauer zu behandeln.
Nicht unterstützte Operatoren werden abgelehnt und nicht als ein anderer Cron-Dialekt interpretiert
Dieser Parser mit fünf Feldern implementiert `L`, `W`, `#` oder `?` nicht. Diese Zeichen werden nicht stillschweigend verworfen und nicht als portable Crontab-Syntax dargestellt. Sechs Felder werden ebenfalls abgelehnt, mit der Begründung, dass die zusätzliche führende Position zu einem sekundenorientierten Scheduler-Stil gehört und nicht zu dem Format, das diese Route liest.
Die Grenze ist bewusst: Minute, Stunde, Tag des Monats, Monat und Wochentag sind hier die vollständige Positionsgrammatik. Bevor Sie einen Ausdruck aus einem anderen Scheduler verschieben, zählen Sie seine Felder und identifizieren Sie seine Operatoren. Der Generator kann seinen eigenen Dialekt validieren; Es kann weder Quartz, die Kalendersyntax von systemd noch die Variation eines Cloud-Dienstes zertifizieren.
Takeaway: Schritte bedeuten „am unteren Ende des Bereichs beginnen“ – und der Generator erklärt einen Schrittausdruck in Worten, die Sie überprüfen können
Bereiche definieren eine inklusive Spanne, verbinden Teile mit Kommas und streichen Beispielwerte von einem feldspezifischen Anfang aus. Das Lesen dieser Operationen in dieser Reihenfolge verwandelt einen dichten Token in eine endliche Menge, die überprüft werden kann. Es erklärt auch Kanten wie 17:45, ohne sich auf eine kopierte Phrase zu verlassen, deren Autor möglicherweise etwas anderes gemeint hat.
Verwenden Sie den Generator als Überprüfungsoberfläche: Geben Sie den Ausdruck ein, lesen Sie die Beschreibung, überprüfen Sie Warnungen und vergleichen Sie die nächsten fünf Wanduhrläufe in der vorgesehenen Zone. Platzieren Sie dann die überprüften fünf Felder neben dem eigentlichen Befehl in Ihrer eigenen Umgebung. Terminerstellung und Auftragsausführung bleiben getrennte Zuständigkeiten.