Ubuntu 16.04 Xenial Xerus
systemd bietet die Möglichkeit, Timer Units zu erstellen. In einer Timer Unit kann hinterlegt werden, dass eine Service Unit zu einem bestimmten Zeitpunkt ausgeführt wird.
Timer Units können also Aufgaben übernehmen, welche traditionell von Cron ausgeführt werden. Aber Timer Units können nicht nur Befehle zu einem festen Zeitpunkt ausführen (z.B. "um Mitternacht"), sondern auch relativ zum Systemstart (z.B. "5 Minuten später").
Da systemd ab Ubuntu 15.04 integraler Bestandteil des Systems ist (und dieses ohne systemd nicht lauffähig ist), sind alle benötigten Komponenten bereits installiert.
Timer Units werden als einfache Textdateien angelegt[2], mit einer Syntax und einem Aufbau ähnlich INI-Dateien. Der Dateiname kann frei gewählt werden, muss aber auf .timer enden. Selbsterstelle Timer werden im Verzeichnis /etc/systemd/system abgespeichert, wozu Root-Rechte[3] erforderlich sind.
Eine Timer Unit hat z.B. folgenden Aufbau:
[Unit] Description=Eine kurze Beschreibung des Timers [Timer] OnBootSec=2min OnUnitActiveSec=5min Unit=name_der_zu_startenden_unit.service [Install] WantedBy=multi-user.target
Es gibt drei Sektionen:
"[Unit]"
"[Timer]" und
"[Install]"
Die Bedeutung der Sektionen "[Unit]" und "[Install]" ist identisch mit der von Service Units. Die Sektion "[Timer]" enthält dabei die Informationen, wann die im Schlüssel Unit
hinterlegte Unit ausgeführt werden soll.
Im obigen Beispiel würde die Unit namens name_der_zu_startenden_unit.service wie folge ausgeführt:
OnBootSec=2min
- erste Ausführung 2 Minuten nach Beginn des Bootvorgangs
OnUnitActiveSec=5min
- weitere Ausführungen jeweils 5 Minuten, nachdem die Service Unit zu letzten Mal gestartet wurde
Timer Units kennen fünf verschiedene Schlüssel für relative Ausführungszeitpunkte:
Schlüssel | Erklärung |
OnActiveSec | relative Zeit bezogen auf den Zeitpunkt, als die Timer Unit zuletzt aktiviert wurde |
OnBootSec | relative Zeit bezogen auf den Zeitpunkt, als der Rechner gestartet wurde |
OnStartupSec | relative Zeit bezogen auf den Zeitpunkt, als systemd gestartet wurde |
OnUnitActiveSec | relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt aktiviert wurde |
OnUnitInactiveSec | relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt deaktiviert wurde |
Außerdem kennen Timer Units noch absolute Zeitangaben. Dies werden im Schlüssel OnCalendar
angeben. So würde z.B. die folgende Timer Unit:
[Unit] Description=Eine kurze Beschreibung des Timers [Timer] OnCalendar=Mon-Fri *-*-* 12:00:00 Unit=name_der_zu_startenden_unit.service [Install] WantedBy=multi-user.target
die Service Unit name_der_zu_startenden_unit.service an jedem Tag von Montag bis Freitag um 12 Uhr ausführen.
Die Timer von systemd kennen eine Vielzahl von Zeiteinheiten. Die kleinste Zeiteinheit sind Mikrosekunden, die größte Jahre. Eine komplette Übersicht inklusive der Einheiten ist in der Dokumentation von systemd zu finden.
Für die Werte des OnCalendar
Schlüssel kennt systemd eine flexible Syntax zur Zeitangabe. So steht z.B. der Wert Thu,Fri 2016-*-1,5 11:12:13
für:
am 1. und 5. jedes Monats im Jahr 2016 um 11 Uhr, 12 Minuten und 13 Sekunden ausführen
aber nur, wenn diese Tage ein Donnerstag oder Freitag sind
Eine vollständige Übersicht inklusive vieler Beispiele findet man in der Dokumentation von systemd.
Nach dem Erstellen müssen Timer Units noch aktiviert und gestartet werden[1]:
sudo systemctl enable name_des_timers.timer sudo systemctl start name_des_timers.timer
Per Voreinstellung haben die Timer eine Genauigkeit von einer Minute, d.h aller spätestens eine Minute nach der in der .timer Datei angegebenen Zeit wird die vom Timer aufgerufene Service Unit aufgerufen.
Wer für einzelne Timer Units einen genaueren Ausführungszeitraum braucht, der kann in der Sektion "[Timer]" zusätzlich den Schlüssel AccuracySec
angeben, gefolgt von einer Zeitangabe. So würde z.B. AccuracySec=5s
die Genauigkeit auf 5 Sekunden setzen.
Wer eine höhere Genauigkeit für alle Timer systemweit benötigt, der hinterlegt den gewünschten Wert in der Konfigurationsdatei /etc/systemd/system.conf.
Diese Revision wurde am 5. August 2016 16:31 von ubot erstellt.