Cron in systemd-Timer umwandeln

Cron in systemd-Timer umwandeln: Crontab-Zeile eingeben, OnCalendar-Ausdruck und fertige .service- und .timer-Dateien erhalten.

–

 

Dienst-Datei (.service)
Timer-Datei (.timer)
Aktivieren und prüfen

Alles läuft in Ihrem Browser. Eingaben verlassen Ihr Gerät nicht.

Von cron zu systemd

Dieses Werkzeug hilft Ihnen, einen Cron in systemd-Timer umzuwandeln. Aus einer Zeile Ihrer Crontab entstehen zwei Dateien: eine Service-Unit, die den Befehl ausführt, und eine Timer-Unit mit dem passenden OnCalendar=-Ausdruck. Ein systemd Timer bietet gegenüber cron einige Vorteile: Die Ausgabe landet im Journal, Abhängigkeiten und Ressourcenlimits lassen sich wie bei jedem Dienst setzen, und mit Persistent=true holt systemd Läufe nach, die wegen eines ausgeschalteten Rechners ausgefallen sind. Deshalb gilt der Timer heute auf vielen Linux-Distributionen als Cron-Alternative.

Die Übersetzung von Crontab in systemd folgt festen Regeln: Bereiche wie 1-5 werden zu 1..5, Schritte wie */15 zu 0/15, Wochentage zu Mon, Tue usw. Eine Besonderheit: Sind in cron sowohl Tag des Monats als auch Wochentag eingeschränkt, läuft der Job, wenn einer der beiden passt. In OnCalendar müssen dagegen alle Angaben zutreffen. Der Konverter erzeugt in diesem Fall zwei OnCalendar=-Zeilen, damit das Verhalten gleich bleibt. Auch @weekly wird ausgeschrieben, denn cron startet es sonntags, das Kürzel weekly in systemd aber montags.

Beim systemd-Timer erstellen sollten Sie den erzeugten Ausdruck mit systemd-analyze calendar gegenprüfen; der Befehl zeigt den nächsten Termin. Anders als cron startet systemd den Befehl ohne Shell: Umleitungen mit >, Pipes oder %-Zeichen wie in der Crontab funktionieren in ExecStart= nicht direkt. Packen Sie solche Befehle in ein Skript oder rufen Sie /bin/sh -c '…' auf. Was ein Cron-Ausdruck bedeutet, erklärt der Cron-Erklärer.

Anleitung: Cron in systemd-Timer umwandeln in 4 Schritten

  1. Im Feld „Cron-Ausdruck“ die Zeitangabe aus der Crontab eintragen, etwa 30 2 * * 1-5 oder @daily.
  2. Unter „Befehl“ das Kommando mit absolutem Pfad angeben und einen „Unit-Name“ vergeben.
  3. Auswählen, ob es eine System-Unit oder eine Nutzer-Unit werden soll, und „Persistent“ aktivieren, wenn verpasste Läufe nachgeholt werden sollen.
  4. Die erzeugten Dateien .service und .timer kopieren, an den angezeigten Ort speichern und die Befehle unter „Aktivieren und prüfen“ ausführen.

Typische Anwendungsfälle

  • Alte Crontab-Einträge eines Servers auf systemd umstellen, damit Ausgaben im Journal landen.
  • Backups oder Bereinigungsjobs mit Persistent=true so einrichten, dass sie nach einem ausgeschalteten Wochenende nachgeholt werden.
  • Für einen Benutzer ohne Root-Rechte einen Timer unter ~/.config/systemd/user/ anlegen.
  • Prüfen, wie ein Cron-Ausdruck mit Tag-des-Monats und Wochentag in systemd korrekt abgebildet wird.
Fragen

Häufige Fragen

Wie lautet @daily als OnCalendar?

*-*-* 00:00:00 oder kurz daily. Beides startet täglich um Mitternacht in der lokalen Zeitzone des Systems.

Was bedeutet Persistent=true?

systemd merkt sich den letzten Lauf. War der Rechner zum geplanten Zeitpunkt aus, startet der Dienst nach dem nächsten Hochfahren einmal nach. Cron kennt das nur über Zusatzwerkzeuge wie anacron.

Wie prüfe ich einen OnCalendar-Ausdruck?

Mit systemd-analyze calendar "Mon..Fri *-*-* 02:30:00". Der Befehl zeigt die normalisierte Form und den nächsten Zeitpunkt. Aktive Timer listet systemctl list-timers.

Warum braucht es zwei Dateien?

Die .timer-Unit legt nur fest, wann etwas passiert. Sie startet die gleichnamige .service-Unit, in der Befehl, Benutzer und weitere Optionen stehen.

Wo sehe ich die Ausgabe eines systemd-Timers?

Die Ausgabe des Dienstes landet im Journal. Mit journalctl -u name.service sehen Sie sie, bei Nutzer-Units mit journalctl --user -u name.service.

Kann ein Timer einen Job auch kurz nach dem Booten starten?

Ja, statt oder zusätzlich zu OnCalendar= setzen Sie OnBootSec=5min. Das entspricht ungefähr @reboot in cron, nur mit einstellbarer Verzögerung.

Weitere Werkzeuge

Das könnte auch helfen

Alle 558 Werkzeuge