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=trueaktivieren, 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-reloadneu 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.