Systemd-Timer sind eine leistungsstarke Alternative zu Cronjobs, um Aufgaben zeitgesteuert auszuführen. Sie bieten mehr Flexibilität und bessere Integration in das Systemd-Ökosystem. In diesem Artikel zeige ich dir, wie du systemd-Timer einrichtest und verwendest.
Was ist ein systemd-Timer?
Ein systemd-Timer ist eine systemd-Einheit (Unit), die zeitgesteuert einen anderen Dienst (Service) ausführt. Timer ersetzen Cronjobs und bieten Vorteile wie:
- Bessere Protokollierung über
journalctl
. - Abhängigkeiten und Startbedingungen können definiert werden.
- Präzisere Steuerung der Ausführungszeit.
Grundlegender Aufbau
Ein systemd-Timer besteht aus zwei Dateien:
- Service-Datei: Definiert, was ausgeführt werden soll.
- Timer-Datei: Definiert, wann der Service ausgeführt wird.
Beide Dateien werden im Verzeichnis /etc/systemd/system/
gespeichert.
Schritt 1: Erstelle die Service-Datei
Die Service-Datei beschreibt die Aktion, die ausgeführt werden soll. Beispiel: Wir möchten ein Skript /usr/local/bin/backup.sh
ausführen.
Erstelle eine Datei namens backup.service
:
|
|
Inhalt der Datei:
|
|
Erklärung:
[Unit]
: Beschreibt die Einheit.Description
gibt eine kurze Beschreibung, undAfter=network.target
stellt sicher, dass das Netzwerk verfügbar ist, bevor der Service startet.[Service]
: Definiert den Service.Type=oneshot
bedeutet, dass der Service eine einmalige Aktion ausführt.ExecStart
gibt den Befehl oder das Skript an, das ausgeführt werden soll.
Schritt 2: Erstelle die Timer-Datei
Die Timer-Datei definiert, wann der Service ausgeführt wird. Erstelle eine Datei namens backup.timer
:
|
|
Inhalt der Datei:
|
|
Erklärung:
[Unit]
: Wie bei der Service-Datei, eine kurze Beschreibung.[Timer]
: Hier wird die Zeitsteuerung definiert.OnCalendar=daily
: Führt den Service täglich um Mitternacht aus. Du kannst auch andere Zeitangaben verwenden (siehe unten).Persistent=true
: Stellt sicher, dass der Timer nach einem Neustart ausgeführt wird, falls er während des Ausfalls verpasst wurde.
[Install]
:WantedBy=timers.target
sorgt dafür, dass der Timer beim Systemstart aktiviert wird.
Zeitangaben für systemd-Timer
Die Zeitangabe für einen systemd-Timer wird in der Timer-Datei mit der Option OnCalendar
definiert. Systemd unterstützt dabei ein flexibles und mächtiges Zeitformat, das sowohl einfache als auch komplexe Zeitpläne ermöglicht. Hier sind einige Beispiele und Erklärungen:
Grundlegendes Format
Das allgemeine Format für OnCalendar
lautet:
|
|
- YYYY: Jahr (z. B. 2025)
- MM: Monat (01 bis 12)
- DD: Tag (01 bis 31)
- HH: Stunde (00 bis 23)
- MM: Minute (00 bis 59)
- SS: Sekunde (00 bis 59)
Du kannst Platzhalter (*
) verwenden, um bestimmte Teile flexibel zu halten.
Häufige Zeitangaben
Stündlich (jede volle Stunde):
1
OnCalendar=hourly
Entspricht:
*-*-* *:00:00
Täglich um Mitternacht:
1
OnCalendar=daily
Entspricht:
*-*-* 00:00:00
Wöchentlich (Sonntag um Mitternacht):
1
OnCalendar=weekly
Entspricht:
Sun *-*-* 00:00:00
Monatlich (1. Tag des Monats um Mitternacht):
1
OnCalendar=monthly
Entspricht:
*-*-01 00:00:00
Jährlich (1. Januar um Mitternacht):
1
OnCalendar=yearly
Entspricht:
*-01-01 00:00:00
Benutzerdefinierte Zeitangaben
Jeden Tag um 15:30 Uhr:
1
OnCalendar=*-*-* 15:30:00
Jeden Montag um 08:00 Uhr:
1
OnCalendar=Mon *-*-* 08:00:00
Jeden ersten Tag eines Monats um 12:00 Uhr:
1
OnCalendar=*-*-01 12:00:00
Jeden letzten Tag eines Monats um 23:59 Uhr:
1
OnCalendar=*-*-28..31 23:59:00
(Systemd erkennt automatisch den letzten Tag eines Monats, z. B. 28, 30 oder 31.)
Jeden zweiten Tag um 06:00 Uhr:
1
OnCalendar=*-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 06:00:00
Wiederholungen und Intervalle
Alle 5 Minuten:
1
OnCalendar=*:0/5
(Wird bei Minute 0, 5, 10, 15 usw. jeder Stunde ausgeführt.)
Alle 2 Stunden:
1
OnCalendar=*-*-* 0/2:00:00
(Wird um 00:00, 02:00, 04:00 usw. ausgeführt.)
Alle 15 Minuten:
1
OnCalendar=*:0/15
(Die Minuten werden in 15-Minuten-Schritten ausgeführt: 00, 15, 30, 45.)
Alle 10 Tage:
1
OnCalendar=*-*-01,11,21 00:00:00
Schritt 3: Systemd neu laden
Nachdem die Dateien erstellt wurden, lade die systemd-Konfiguration neu:
|
|
Schritt 4: Timer aktivieren und starten
Aktiviere den Timer, damit er beim Systemstart automatisch gestartet wird:
|
|
Das --now
startet dem Timer direkt mit dem aktivieren. Falls ihr ihn manuell starten wollt lasst es weg und nutzt:
|
|
Schritt 5: Überprüfe den Timer
Um sicherzustellen, dass der Timer korrekt eingerichtet ist, kannst du ihn dir anzeigen lassen:
|
|
Optionale Befehle und Tipps
Alle Timer überprüfen:
1
systemctl list-timers --all
Die Ausgabe zeigt alle aktiven und inaktiven Timer, einschließlich der nächsten und letzten Ausführungszeit.
Service-Status überprüfen:
1
systemctl status backup.service
Logs des Services anzeigen:
1
journalctl -u backup.service
Timer stoppen oder deaktivieren:
- Timer stoppen:
1
systemctl stop backup.timer
- Timer deaktivieren:
1
systemctl disable backup.timer
- Timer stoppen:
Fazit
Systemd-Timer sind eine moderne und leistungsstarke Alternative zu Cronjobs. Sie bieten präzise Steuerungsmöglichkeiten, bessere Protokollierung und nahtlose Integration in das System. Mit den oben beschriebenen Schritten kannst du ganz einfach eigene Timer einrichten und verwalten.