Die grundlegenden und einführenden Informationen zu Systemd enthält
die Handbuchseite Systemd-Start
Die alle Unit-Dateien betreffenden Sektionen [Unit] und
[Install] behandelt unsere Handbuchseite Systemd
Unit-Datei
In der vorliegenden Handbuchseite erklären wir die Funktion der Unit
systemd.timer, mit der zeitgesteuert Aktionen ausgelöst
werden können.
Die timer-Unit wird meist eingesetzt, um regelmäßig
anfallende Aktionen zu erledigen. Dazu ist eine gleichnamige
service-Unit notwendig, in der die Aktionen definiert sind.
Sobald der Systemzeitgeber mit der in der timer-Unit
definierten Zeit übereinstimmt, aktiviert sie die gleichnamige
service-Unit.
Bei entsprechender Konfiguration können verpasste Läufe, während die
Maschine ausgeschaltet war, nachgeholt werden.
Auch ist es möglich, dass eine timer-Unit die gewünschten
Aktionen nur ein einziges Mal zu einem vorher definierten Termin
auslöst.
Die systemd-timer-Unit benötigt zwei Dateien mit dem
gleichen Basename im Verzeichnis
/usr/local/lib/systemd/system/
für ihre Funktion. (Ggf. ist
das Verzeichnis zuvor mit dem Befehl
mkdir -p /usr/local/lib/systemd/system/
anzulegen.) Das sind die
Für umfangreichere Aktionen erstellt man als dritte Datei ein Skript
in /usr/local/bin/
, das von der service-Unit ausgeführt
wird.
Wir erstellen in dem Beispiel ein regelmäßiges Backup mit
rsync
.
Die service-Unit, die das Backup ausführt, wird von der timer-Unit
aktiviert und kontrolliert und benötigt daher keine [Install] Sektion.
Somit reicht die Beschreibung der Unit in der Sektion [Unit]. Ihre
Sektion [Service] enthält den auszuführenden Befehl nach der Option
ExecStart=
.
Wir legen die Datei backup.service
im Verzeichnis
/usr/local/lib/systemd/system/
mit folgendem Inhalt an.
[Unit]
Description="Command to backup my home directory"
[Service]
Type=oneshot
ExecStart=/usr/bin/rsync -a --exclude=.cache/* /home/<user> /mnt/sdb5/backup/home/
Den String <user> bitte durch den eigenen User ersetzen.
Wir legen die Datei backup.timer
im Verzeichnis
/usr/local/lib/systemd/system/
mit folgendem Inhalt an.
[Unit]
Description="Backup my home directory"
[Timer]
OnCalendar=*-*-* 19:00:00
Persistent=true
[Install]
WantedBy=timers.target
Erklärungen
Die timer-Unit muss zwingend die Sektion [Timer] enthalten, in der
festgelegt wird wann und wie die zugehörige service-Unit ausgelöst
wird.
Es stehen zwei Timer-Typen zur Verfügung:
OnCalendar=
einen Echtzeit- (d.h.
Wanduhr-)Zeitgeber definiertOnActiveSec=
, OnBootSec=
,
OnStartupSec=
, OnUnitActiveSec=
,
OnUnitInactiveSec=
einen zu der Option relativen Zeitgeber
definiert.Die im Beispiel enthaltene Option Persistent=
speichert
den Zeitpunkt, zu dem die service-Unit das letzte Mal ausgelöst wurde,
als leere Datei im Verzeichnis /var/lib/systemd/timers/
.
Dies ist nützlich, um verpasste Läufe, als die Maschine ausgeschaltet
war, nachzuholen.
timer-Unit eingliedern
Mit dem folgenden Befehl gliedern wir die timer-Unit in systemd ein.
# systemctl enable backup.timer
Created symlink
/etc/systemd/system/timers.target.wants/backup.timer →
/usr/local/lib/systemd/system/backup.timer.
Der analoge Befehl für die service-Unit ist nicht notwendig und würde auch zu einem Fehler führen, da in ihr keine [Install] Sektion enthalten ist.
timer-Unit manuell auslösen
Es wird nicht die timer-Unit, sondern die von ihr auszulösende service-Unit aufgerufen.
# systemctl start backup.service
“cron” und “anacron” sind die bekanntesten und weit verbreiteten Job-Zeitplaner. Systemd Timer können eine Alternative sein. Wir betrachten kurz den Nutzen von, und die Vorbehalte gegen Systemd Timer.
Nutzen
Vorbehalte
Deutsche
Manpage ‘systemd.timer’
Archlinux
Wiki, Timers
PRO-LINUX.DE,
Systemd Timer Units…