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.

Einen systemd-Zeitgeber wieder in einen cron-Ausdruck überführen

Dieses Werkzeug wandelt das `OnCalendar=` eines systemd-Zeitgebers zurück in einen cron-Ausdruck aus Minute, Stunde, Tag des Monats, Monat und Wochentag. Auch benannte Abkürzungen wie `daily` und `weekly` werden berücksichtigt. Es ist die Umkehrung seines Schwesterwerkzeugs.

**Aufmerksamkeit verdient in dieser Richtung, dass ein Teil dessen, was systemd ausdrücken kann, in cron keine Entsprechung hat.** `OnCalendar=` erlaubt **Angaben bis auf die Sekunde** und **Datumsbereiche** wie `*-*-01..07`, und beides passt nicht in die fünf Felder von cron. Ebenso wenig hat cron ein Gegenstück zu `Persistent=`, das die während eines Stillstands versäumten Läufe nachholt. **Der andere Punkt ist die Bedeutung von Tag des Monats und Wochentag: systemd behandelt beide als Und, während cron sie als Oder liest.** Eine unmittelbare Übertragung verschiebt den Zeitplan mithin dahin, öfter zu laufen, und das Werkzeug warnt Sie, wo dies zutrifft.

So wandeln Sie um

  1. Geben Sie den Wert von OnCalendar= ein Eine Form wie `Mon *-*-* 06:00:00` genügt, ebenso ein Name wie `daily`.
  2. Sehen Sie den erzeugten cron-Ausdruck durch Sie erhalten das auf die fünf Felder übertragene Ergebnis.
  3. Lesen Sie die Warnungen **Benannt werden sowohl Angaben, die cron nicht ausdrücken kann, als auch die Bedeutungsunterschiede.**
  4. Übertragen Sie ihn in eine crontab Setzen Sie den auszuführenden Befehl dahinter, und die Zeile ist eintragsfertig.

Tipps für die Nutzung

  • 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.

Wofür Sie es nutzen können

Um in eine Umgebung ohne systemd zu wechseln

**Container und ältere unixartige Systeme bieten mitunter nichts als cron.**

Um einen bestehenden Zeitgeber zu entziffern

Auch ohne Vertrautheit mit der `OnCalendar=`-Schreibweise wird die Häufigkeit klar, sobald man sie in einen cron-Ausdruck überführt.

Um in zwei Umgebungen denselben Zeitplan zu halten

**Wo der Wirkbetrieb systemd und die Entwicklung cron verwendet, lassen sich beide Konfigurationen gegeneinanderhalten.**

Um Ihre Zeitpläne zu sichten

Sie gemeinsam umzuwandeln gibt Ihnen Gelegenheit zu prüfen, ob die Abstände die gemeinten sind.

Begriffe zu Zeitplanern

OnCalendar=
Der Schlüssel, der die Zeit in einem systemd-Zeitgeber angibt. **Wochentag, Datum und Uhrzeit passen in eine einzige Zeile.**
Cron-Ausdruck
Die Schreibweise, die eine Zeit durch fünf Felder ausdrückt: Minute, Stunde, Tag des Monats, Monat und Wochentag. **Sekunden lassen sich darin nicht angeben.**
Benannte Abkürzung
Ein anderer Name für einen gängigen Abstand, etwa `daily`, `weekly` oder `monthly`.
Bedeutungsunterschied
**Sind Tag des Monats und Wochentag beide angegeben, liest systemd sie als Und und cron als Oder.**
Persistent=
Die Einstellung, die während eines Stillstands versäumte Läufe nachholt. **Cron hat dafür kein unmittelbares Gegenstück.**
Crontab
Die Datei, in der der Zeitplan von cron steht, oder der Befehl, der sie bearbeitet.

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.
Tool-kun

Ü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.