bitlvl
DE

Cron ⇄ systemd-Timer-Konverter

Fügen Sie eine vollständige crontab-Zeile ein, Zeitplan und Befehl, und erhalten Sie die zwei Unit-Dateien plus die Installationsbefehle. Oder fügen Sie eine OnCalendar-Zeile ein, um das Cron-Äquivalent zu bekommen.

Timer-Unit

 

Service-Unit

 

Installieren

 

Rückwärts: OnCalendar → Cron

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Cron gegen systemd-Timer

cronsystemd-Timer
DefinitionEine Zeile in einer crontabZwei Dateien: .timer (wann) und .service (was)
Verpasste LäufeVerloren (außer mit anacron)Persistent=true führt sie beim nächsten Start aus
UmgebungMinimaler PATH, kein Profil; Ausgabe per MailIn der Unit definiert; Ausgabe ins Journal
ÜberlappungLäuft erneut, auch wenn der letzte Lauf noch läuftÜberlappt nie: ein Timer wartet, bis sein Service fertig ist
AbhängigkeitenKeineAfter=network-online.target, Mounts, andere Units
Ressourcenlimits, SandboxingNeinAlles von systemd: MemoryMax, CPUQuota, ProtectSystem…
Einsichtcrontab -l, im Syslog grepsystemctl list-timers, journalctl -u, systemctl status
EinfachheitEine ZeileZwanzig Zeilen

Für einen Einzeiler auf einem persönlichen Rechner ist cron in Ordnung. Für alles auf einem Server, das nicht überlappen darf, nach Ausfallzeit nachholen muss, Limits braucht oder dessen Logs später jemand liest, ist ein Timer das bessere Werkzeug, und der Konverter schreibt den Boilerplate.

Was der Konverter mit dem Befehl macht

ExecStart= nimmt einen absoluten Pfad und Argumente, keine Shell-Zeile. Umleitungen (>> log 2>&1) werden entfernt, weil das Journal die Ausgabe erfasst; Pipes und && werden in /bin/sh -c '…' gehüllt. Crons Regel „% bedeutet Zeilenumbruch“ gilt nicht, also funktioniert date +%F wie geschrieben. In der crontab gesetzte Umgebungsvariablen wandern in Environment=-Zeilen.

Tag im Monat und Wochentag

Schränkt eine Cron-Zeile beides ein, feuert cron, wenn eines passt; systemd verlangt beides. Der Konverter warnt, da dieser Zeitplan zwei Timer braucht, um nachgebildet zu werden.

Fragen

Wohin kommen die Dateien?

/etc/systemd/system/ für System-Units, ~/.config/systemd/user/ für User-Units (dann systemctl --user und loginctl enable-linger nutzen). Nach dem Hinzufügen oder Bearbeiten systemctl daemon-reload ausführen.

Wie sehe ich, wann er das nächste Mal läuft?

systemctl list-timers --all zeigt den nächsten und letzten Lauf jedes Timers. systemd-analyze calendar "ausdruck" zeigt den nächsten Lauf für jeden OnCalendar-Ausdruck.

Wie starte ich ihn jetzt, ohne zu warten?

systemctl start name.service (nicht den Timer). Der Timer behält seinen eigenen Zeitplan.

Kann ein Timer alle 10 Sekunden laufen?

Ja, mit OnCalendar=*:*:0/10 und AccuracySec=1s, oder mit OnUnitActiveSec=10s für „10 Sekunden nach dem Ende des letzten Laufs“. Cron kommt nicht unter eine Minute.