Linux Administration

Systemd-Timer statt Cronjobs verwenden – Vorteile und Beispiele

Automatisiere wiederkehrende Aufgaben unter Linux mit Systemd-Timern statt Cronjobs. Erfahre die Vorteile, lerne die Einrichtung kennen und nutze praxisnahe Beispiele.

4 min Lesezeit
Grafik: Systemd-Timer statt Cronjobs – Moderne Linux-Automatisierung

Automatisierte Aufgaben unter Linux modern verwalten

Seit Jahrzehnten gehören Cronjobs zu den Standardwerkzeugen unter Linux, wenn es darum geht, wiederkehrende Aufgaben automatisch auszuführen. Ob Backups, Logbereinigung oder Softwareupdates – nahezu jeder Administrator hat bereits mit cron gearbeitet.

Mit der Einführung von systemd steht jedoch eine deutlich modernere Alternative zur Verfügung: Systemd-Timer. Sie bieten zahlreiche Funktionen, die klassische Cronjobs nicht oder nur mit erheblichem Aufwand ermöglichen.

In diesem Artikel erfährst du, warum sich der Umstieg lohnt, welche Vorteile Systemd-Timer bieten und wie du sie Schritt für Schritt einrichtest.


Was sind Systemd-Timer?

Ein Systemd-Timer ist eine Komponente des Init-Systems systemd, das mittlerweile auf nahezu allen aktuellen Linux-Distributionen wie Debian, Ubuntu, Fedora oder Rocky Linux zum Einsatz kommt.

Ein Timer startet dabei keine Befehle direkt, sondern aktiviert einen sogenannten Service. Dadurch werden Aufgaben sauber voneinander getrennt:

  • Service = Was soll ausgeführt werden?
  • Timer = Wann soll es ausgeführt werden?

Diese Trennung sorgt für eine deutlich bessere Wartbarkeit.


Warum Cron nicht immer die beste Wahl ist

Cron erfüllt seinen Zweck seit vielen Jahren zuverlässig. Dennoch stößt das Werkzeug in modernen Serverumgebungen häufig an seine Grenzen.

Typische Nachteile sind:

  • keine integrierte Protokollierung
  • schwierige Fehlersuche
  • keine Abhängigkeiten zwischen Diensten
  • keine komfortable Statusanzeige
  • keine automatische Nachholung verpasster Ausführungen
  • keine einfache Verwaltung über systemctl

Gerade bei produktiven Servern kann dies schnell unübersichtlich werden.


Vorteile von Systemd-Timern

Bessere Protokollierung

Alle Ausgaben landen automatisch im Journal.

journalctl -u backup.service

Somit lassen sich Fehler wesentlich einfacher analysieren.


Komfortable Statusanzeige

Während Cron keine Übersicht über den aktuellen Zustand bietet, genügt bei Systemd:

systemctl status backup.timer

oder

systemctl status backup.service

Man erkennt sofort:

  • letzter Start
  • nächster Start
  • Exit-Code
  • Laufzeit
  • Fehlermeldungen

Verpasste Ausführungen automatisch nachholen

Ein großer Vorteil ist die Option:

Persistent=true

War der Server zum geplanten Zeitpunkt ausgeschaltet, wird die Aufgabe unmittelbar nach dem nächsten Systemstart ausgeführt.

Cron kennt diese Funktion nicht.


Zufällige Verzögerung

Mehrere Server sollen nicht exakt gleichzeitig starten?

Mit

RandomizedDelaySec=10m

verteilt Systemd den Start zufällig.

Das reduziert Lastspitzen erheblich.


Abhängigkeiten definieren

Services können beispielsweise erst starten, wenn

  • Netzwerk verfügbar ist
  • Datenbanken laufen
  • Dateisysteme eingebunden wurden

Dies verhindert viele typische Fehler.


Einheitliche Verwaltung

Alle Timer werden wie gewöhnliche Dienste verwaltet.

systemctl start backup.timer
systemctl stop backup.timer
systemctl restart backup.timer
systemctl enable backup.timer
systemctl disable backup.timer

Aufbau eines Systemd-Timers

Ein Timer besteht immer aus zwei Dateien.

Service

/etc/systemd/system/backup.service

Timer

/etc/systemd/system/backup.timer

Beispiel: Tägliches Backup

Schritt 1: Service erstellen

sudo nano /etc/systemd/system/backup.service

Inhalt:

[Unit]
Description=Tägliches Backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

Die Datei beschreibt lediglich den auszuführenden Befehl.


Schritt 2: Timer erstellen

sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Tägliches Backup um 02:00 Uhr

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

Schritt 3: Konfiguration neu laden

sudo systemctl daemon-reload

Schritt 4: Timer aktivieren

sudo systemctl enable --now backup.timer

Timer überprüfen

Alle aktiven Timer anzeigen:

systemctl list-timers

Beispiel:

NEXT                         LEFT     LAST
Tue 02:00                    5h       Mon 02:00

Timer manuell starten

Soll lediglich der Service getestet werden:

sudo systemctl start backup.service

Der Timer bleibt davon unberührt.


Zeitangaben mit OnCalendar

Systemd unterstützt sehr flexible Zeitdefinitionen.

Jede Stunde:

OnCalendar=hourly

Täglich:

OnCalendar=daily

Wöchentlich:

OnCalendar=weekly

Monatlich:

OnCalendar=monthly

Jährlich:

OnCalendar=yearly

Jeden Sonntag um 03:00 Uhr:

OnCalendar=Sun *-*-* 03:00:00

Jeden Werktag um 18 Uhr:

OnCalendar=Mon..Fri 18:00

Alle 15 Minuten:

OnCalendar=*:0/15

Relative Zeitsteuerung

Nicht immer ist eine feste Uhrzeit sinnvoll.

Beispiele:

10 Minuten nach dem Boot:

OnBootSec=10min

Eine Stunde nach Start des Services:

OnUnitActiveSec=1h

30 Minuten nach Ende:

OnUnitInactiveSec=30min

Damit lassen sich wiederkehrende Aufgaben unabhängig von festen Uhrzeiten realisieren.


Logs anzeigen

Alle Ausgaben des Services:

journalctl -u backup.service

Nur aktuelle Meldungen:

journalctl -fu backup.service

Die Protokollierung erfolgt automatisch.


Timer deaktivieren

sudo systemctl disable --now backup.timer

Timer löschen

sudo rm /etc/systemd/system/backup.timer
sudo rm /etc/systemd/system/backup.service

sudo systemctl daemon-reload

Cronjob oder Systemd-Timer?

FunktionCronSystemd-TimerEinfache Einrichtung✓✓Journal-Logging✗✓Statusabfrage✗✓Verpasste Jobs nachholen✗✓Abhängigkeiten✗✓Zufällige Verzögerung✗✓Verwaltung mit systemctl✗✓Flexible ZeitsteuerungTeilweise✓Best Practices

Für produktive Server empfiehlt sich folgendes Vorgehen:

  • Für jede Aufgabe einen eigenen Service anlegen.
  • Aussagekräftige Beschreibungen (Description=) verwenden.
  • Persistent=true aktivieren, wenn Aufgaben nachgeholt werden sollen.
  • Skripte immer außerhalb der Service-Dateien speichern, beispielsweise unter /usr/local/bin.
  • Dienste regelmäßig mit journalctl überwachen.
  • Timer nach Änderungen mit daemon-reload neu einlesen.
  • Services mit einem dedizierten Benutzer ausführen, sofern Root-Rechte nicht erforderlich sind.


Systemd-Timer sind der moderne Nachfolger klassischer Cronjobs und bieten zahlreiche Vorteile für Administratoren. Durch die Trennung von Zeitplanung und eigentlicher Aufgabe, die automatische Protokollierung, die komfortable Verwaltung über systemctl sowie Funktionen wie Persistent=true oder flexible Zeitsteuerungen eignen sie sich besonders für professionelle Serverumgebungen.

Während Cron für einfache Aufgaben weiterhin ausreichend sein kann, profitieren produktive Systeme deutlich von den erweiterten Möglichkeiten der Systemd-Timer. Wer bereits systemd nutzt – was auf den meisten aktuellen Linux-Distributionen der Fall ist –, sollte neue Automatisierungen bevorzugt mit Timern umsetzen. Sie sorgen für mehr Transparenz, bessere Fehlersuche und eine insgesamt wartungsfreundlichere Serververwaltung.