bitlvl
DE

systemd-Timer-OnCalendar-Erklärer

Tippen Sie einen OnCalendar-Ausdruck oder fügen Sie eine Cron-Zeile zum Umwandeln ein. Sie erhalten die Bedeutung, die nächsten zehn Läufe und ein komplettes .timer- + .service-Paar für /etc/systemd/system.

Unit-Dateien

  

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

OnCalendar-Syntax

Das Format ist [Wochentag] Datum Zeit, jeder Teil optional: Mon..Fri *-*-* 06:30:00. Wochentage nutzen dreibuchstabige Namen mit ..-Bereichen und Kommas. Das Datum ist YYYY-MM-DD mit * für beliebig; die Zeit ist HH:MM:SS (Sekunden standardmäßig 00). Jedes Feld akzeptiert Listen (1,15), Bereiche (8..18) und Schritte (*/15 oder 0/15, 8..18/2). Kürzel: minutely, hourly, daily, weekly, monthly, yearly, quarterly. Ein Zonenname am Ende wendet den Ausdruck in dieser Zone an (*-*-* 09:00 Europe/Berlin).

CronOnCalendar
*/5 * * * **-*-* *:*/5:00
0 * * * *hourly
30 6 * * 1-5Mon..Fri *-*-* 06:30:00
0 9 1 * **-*-01 09:00:00
0 3 * * 0Sun *-*-* 03:00:00
0 0 L * **-*~01 00:00:00 (letzter Tag des Monats: ~ zählt vom Ende)

Was Timer können und Cron nicht

  • Persistent=true: War der Rechner aus, als der Timer hätte feuern sollen, läuft er beim nächsten Start. Cron verpasst ihn einfach (dafür gibt es anacron).
  • RandomizedDelaySec=: Läufe über ein Fenster streuen, damit eine Flotte den Server nicht in derselben Sekunde trifft.
  • AccuracySec=: standardmäßig eine Minute; setzen Sie 1s, wenn die exakte Zeit zählt, oder länger, um Aufwachvorgänge zu bündeln und Strom zu sparen.
  • Logs gehen ins Journal (journalctl -u name.service), der Job läuft mit Sandboxing, Abhängigkeiten und Ressourcenlimits des Service, und systemctl list-timers zeigt nächste und letzte Läufe.

Einen Ausdruck prüfen

systemd-analyze calendar "Mon..Fri *-*-* 06:30" gibt die normalisierte Form und den nächsten Lauf aus, was diese Seite nachbildet. Nach dem Installieren eines Timers: systemctl daemon-reload && systemctl enable --now name.timer, dann systemctl list-timers --all.

Fragen

Warum läuft mein Timer einmal und nie wieder?

Meist wurde der Timer gestartet, aber nicht aktiviert (systemctl enable --now name.timer), oder der ausgelöste Service ist ein oneshot ohne passende Timer-Unit. Prüfen Sie systemctl list-timers und journalctl -u name.timer.

Wie lasse ich einen Timer als normaler Benutzer laufen?

Legen Sie die Units in ~/.config/systemd/user/ ab, nutzen Sie systemctl --user und führen Sie loginctl enable-linger $USER aus, damit sie ohne aktive Login-Sitzung feuern.

Nutzt OnCalendar die Systemzeitzone?

Ja, sofern der Ausdruck nicht mit einem Zonennamen endet, was systemd 243+ unterstützt. Container- und Cloud-Images laufen meist in UTC; setzen Sie die Zone explizit, wenn der Zeitplan in Ortszeit gemeint ist.

Wie drücke ich „jeden Werktag um 9 und 17 Uhr“ aus?

Mon..Fri *-*-* 09,17:00:00. Listen funktionieren in jedem Feld.