systemd-Timer-zu-Cron-Ausdruck-Konverter

Konvertieren Sie die OnCalendar=-Syntax eines systemd-Timers kostenlos in einen Cron-Ausdruck (Minute Stunde Tag Monat Wochentag). Das Gegenstück zu unserem Konverter "Cron zu systemd-Timer". Unterstützt benannte Kurzformen (daily, weekly usw.) und warnt vor semantischen Unterschieden, wenn Tag des Monats und Wochentag gleichzeitig angegeben werden.

Zuordnung von systemd-Komponenten zu Cron-Feldern

Jeder Teil der OnCalendar=-Syntax von systemd entspricht einem der fünf Cron-Felder wie folgt.

Position Position in systemd Cron-Feld
1 Minute im Zeitteil (MM in HH:MM:SS) Minute
2 Stunde im Zeitteil (HH in HH:MM:SS) Stunde
3 Tag im Datumsteil (Tag in Jahr-Monat-Tag) Tag des Monats
4 Monat im Datumsteil (Monat in Jahr-Monat-Tag) Monat
5 Wochentag-Präfix (z. B. Mon, Mon..Fri) Wochentag

Das Sekundenfeld von systemd (SS in HH:MM:SS) hat kein Cron-Äquivalent und wird bei der Konvertierung ignoriert (eine Warnung erscheint, wenn die Sekunden nicht "00" sind).

Zuordnung von systemd-Wochentagskürzeln zu Cron-Wochentagsnummern

systemd verwendet englische Wochentagskürzel, während Cron Zahlen von 0 bis 6 verwendet.

systemd-Wochentagskürzel Cron-Wochentagsnummer
Sun 0
Mon 1
Tue 2
Wed 3
Thu 4
Fri 5
Sat 6

Zuordnung von systemd-Kurzformen zu Cron-Ausdrücken

systemd hat lesbare benannte Kurzformen wie "daily" und "weekly", und dieses Tool kann auch diese in Cron-Ausdrücke umwandeln.

OnCalendar= Cron-Ausdruck
minutely * * * * *
hourly 0 * * * *
daily / midnight 0 0 * * *
weekly 0 0 * * 1
monthly 0 0 1 * *
yearly / annually 0 0 1 1 *

Häufige Konvertierungsbeispiele

OnCalendar= Cron-Ausdruck Bedeutung
*-*-* *:*:00 * * * * * Läuft jede Minute (entspricht "* * * * *" in Cron).
*:00/15:00 */15 * * * * Läuft alle 15 Minuten.
Mon..Fri 09:00:00 0 9 * * 1-5 Läuft um 9:00 Uhr an Werktagen (Montag bis Freitag).
*-*-01 00:00:00 0 0 1 * * Läuft um Mitternacht am 1. jeden Monats.
*-01-01 00:00:00 0 0 1 1 * Läuft um Mitternacht am 1. Januar jedes Jahr.
Mon *-*-01 00:00:00 0 0 1 * 1 Ein Beispiel mit sowohl einem Tag des Monats (dem 1.) als auch einem Wochentag (Montag). systemd behandelt dies als UND-Bedingung (läuft nur, wenn beide zutreffen), aber Cron interpretiert es als ODER-Bedingung (läuft, wenn eines von beiden zutrifft) — das konvertierte Ergebnis läuft also häufiger als im ursprünglichen OnCalendar-Ausdruck beabsichtigt.

Ein OnCalendar-Ausdruck, der sowohl Tag des Monats als auch Wochentag auf etwas anderes als "*" einschränkt, kann nicht präzise in Cron umgewandelt werden (systemd verwendet UND-Logik, Cron verwendet ODER-Logik). Prüfen Sie in solchen Fällen immer die Bedeutung des Konvertierungsergebnisses.

Tipps zur Verwendung

  • Sie können benannte Kurzformen wie "daily", "weekly" oder "monthly" direkt eingeben — sie werden intern in den entsprechenden Cron-Ausdruck umgewandelt (z. B. wird "daily" zu "0 0 * * *").
  • Die Einschränkung von sowohl Tag des Monats als auch Wochentag auf etwas anderes als "*" ändert die Bedeutung bei der Umwandlung der UND-Logik von systemd in die ODER-Logik von Cron. Prüfen Sie in diesem Fall die Warnung und bestätigen Sie, dass das Ergebnis Ihrer Absicht entspricht.
  • Die Jahres- und Sekundenfelder von OnCalendar haben kein Cron-Äquivalent und werden bei der Konvertierung verworfen (eine Warnung benachrichtigt Sie, wenn dies geschieht).
  • Nützlich bei der Migration von Arbeitslasten weg von systemd — zum Beispiel beim Verschieben eines geplanten Jobs zu einem Kubernetes CronJob (der Cron-ähnliche Syntax verwendet).
  • Bei einfachen Zeitplänen, die Wochentag- und Datumseinschränkungen nicht kombinieren (stündlich, täglich, wöchentlich usw.), ist diese Konvertierung immer exakt.

Häufig gestellte Fragen

Das kommt vor, wenn Sie zu einem schlanken Docker-Container ohne systemd migrieren, wenn Sie denselben Zeitplan in einem Kubernetes CronJob (der Cron-ähnliche Syntax verwendet) reproduzieren möchten, oder wenn die Werkzeuge Ihres Teams nur Konfiguration im Cron-Format unterstützen.

Ja. Die direkte Eingabe von benannten systemd-Kurzformen wie "minutely", "hourly", "daily", "weekly", "monthly" oder "yearly" wandelt sie in den entsprechenden Cron-Ausdruck um.

In der OnCalendar-Syntax von systemd werden eine Wochentags- und eine Datumseinschränkung immer mit UND-Logik kombiniert (beide müssen zutreffen). Nach der klassischen Vixie-Cron-Semantik macht die Einschränkung von sowohl Tag des Monats als auch Wochentag auf etwas anderes als "*" sie jedoch zu einer ODER-Bedingung (eines von beiden reicht). Dieses Tool erkennt diesen Fall und zeigt eine Warnung an, dass das konvertierte Ergebnis breiter sein könnte (häufiger läuft) als der ursprüngliche OnCalendar-Ausdruck.

Cron-Ausdrücke haben kein Feld für das Jahr, daher wird jede Jahreseinschränkung in einem OnCalendar-Ausdruck (etwas anderes als "*") bei der Konvertierung ignoriert. Dieses Tool zeigt in diesem Fall eine Warnung an und weist darauf hin, dass das konvertierte Ergebnis jedes Jahr läuft, unabhängig vom angegebenen Jahr.

Das Tool deckt die Hauptmuster ab, die unser Tool "Cron zu systemd-Timer" erzeugt (minütlich, stündlich, täglich, wöchentlich, monatlich, jährlich, Schritte, Bereiche, Listen, Wochentagseinschränkungen und benannte Kurzformen). Da die OnCalendar-Syntax jedoch ausdrucksstärker als Cron ist, können sehr komplexe Angaben — mehrere Jahre, sekundengenaue Wiederholungen — nicht exakt in Cron dargestellt werden und die Konvertierung kann fehlschlagen.
ツールくん

Übrigens – Was es bedeutet, einen systemd-Timer zurück zu Cron zu konvertieren

Technologiemigrationen werden meist als einseitig beschrieben — von einem alten zu einem neueren Mechanismus —, aber in der Praxis kommt die umgekehrte Konvertierung auch häufig vor. Eine Arbeitslast von einem systemd-basierten Host auf einen schlanken Container zu verschieben, der nur Cron unterstützt, oder auf ein Orchestrierungswerkzeug, das Cron-ähnliche Zeitplansyntax verwendet (wie Kubernetes CronJob), bedeutet, die OnCalendar-Syntax zurück in einen Cron-Ausdruck umzuwandeln.

Diese "umgekehrte Konvertierung" ist keine einfache Eins-zu-eins-Zuordnung, weil die OnCalendar-Syntax von systemd ausdrucksstärker ist als Cron. Sie unterstützt Konzepte, die die fünf Felder von Cron einfach nicht darstellen können — Einschränkungen auf Jahresebene, Sekundenpräzision und eine UND-artige Kombination von Datum und Wochentag. Deshalb zielt dieses Tool darauf ab, die häufig verwendeten Muster präzise zu konvertieren, und behandelt alles Komplexere als Konvertierungsfehler, anstatt eine Näherung zu raten.

Der semantische Unterschied, wenn sowohl Tag des Monats als auch Wochentag angegeben werden — UND-Logik bei systemd gegenüber ODER-Logik bei Cron — ist die größte Falle bei dieser umgekehrten Konvertierung. Eine Bedingung wie "der 1. des Monats" UND "Montag" schränkt systemd nur auf Tage ein, die sowohl der 1. als auch ein Montag sind, aber Cron würde stattdessen an jedem Tag laufen, der entweder der 1. oder ein Montag ist. Dieses Tool warnt explizit davor, damit diese leicht zu übersehende Bedeutungsverschiebung bei einer Migration nicht unbemerkt bleibt.