Systemd.timer: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| (81 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''systemd.timer''' - [[Systemd]] [[Timer Units]] | |||
== Beschreibung == | |||
; Timer Unit | |||
Beschreibt, wann eine [[Service Unit]] ausgeführt werden soll | |||
* Aufgaben übernehmen, welche traditionell von [[Cron]] ausgeführt werden | |||
; Flexibilität | |||
Timer Units führen Befehle aus | |||
* zu einem festen Zeitpunkt ("um Mitternacht") | |||
* relativ zum Systemstart ("5 Minuten später") | |||
== Anwendung == | |||
=== Anzeige === | |||
Timer anzeigen | |||
; System Timer | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
sudo systemctl list-timers | |||
</syntaxhighlight> | |||
; Benutzern Timer | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
sudo systemctl --user list-timers | |||
</syntaxhighlight> | |||
; Inaktive Timer | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
sudo systemctl --user list-timers --all | |||
</syntaxhighlight> | |||
=== Aktivierung === | |||
Timer aktivieren | |||
; Timer Units aktivieren | |||
Nach der Erstellung müssen Timer Unitsaktiviert und gestartet werden | |||
<syntaxhighlight lang="bash" highlight="1-2" line copy> | |||
sudo systemctl enable name_des_timers.timer | |||
sudo systemctl start name_des_timers.timer | |||
</syntaxhighlight> | |||
=== Ausführungszeitpunkte === | |||
; Schlüssel für relative Ausführungszeitpunkte | |||
{| class="wikitable options big" | |||
|- | |||
! Schlüssel !! Beschreibung | |||
|- | |||
|| OnActiveSec | |||
|| relativ zur letzten Timer-Unit-Aktivierung | |||
|- | |||
|| OnBootSec | |||
|| relativ zum letzten Neustart des Rechners | |||
|- | |||
|| 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 | |||
|- | |||
|} | |||
; Absolute Zeitangaben | |||
* Diese werden im Schlüssel OnCalendar angeben | |||
* So würde z.B | |||
* die folgende Timer Unit: | |||
{| class="wikitable options big" | |||
|- | |||
|| 1 | |||
2 | |||
3 | |||
4 | |||
5 | |||
6 | |||
7 | |||
8 | |||
9 | |||
|| [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 | |||
; Zeitangaben | |||
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 [http://www.freedesktop.org/software/systemd/man/systemd.time.html#Parsing%20Time%20Spans 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 [http://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events Dokumentation] von systemd | |||
=== Verpasste Timer === | |||
; Verpasste Timer nachholen | |||
Möchte man eine Timer-Unit auch nachträglich ausführen lassen | |||
* also etwa falls der Rechner zum Zeitpunkt der Fälligkeit des Timers ausgeschaltet war | |||
* muss man im Abschnitt [Timer] zusätzlich die Direktive | |||
Persistent=true | |||
setzen | |||
; Voreinstellung | |||
Die Voreinstellung von systemd ist hier false | |||
* verpasste Timer werden nicht nachgeholt | |||
* Die Direktive funktioniert nur in Kombination mit der OnCalendar Direktive, nicht mit anderen Direktiven für Zeitpunkte | |||
=== at Ersatz === | |||
Neben den Aufgaben | |||
die traditionell [https://wiki.ubuntuusers.de/Cron/ Cron] erledigt | |||
kann systemd auch die typische Aufgabe von [https://wiki.ubuntuusers.de/at/ at] übernehmen | |||
einen Job nur ein einziges mal zu einem bestimmten Zeitpunkt zu starten | |||
* Es muss kein Script angelegt werden, sondern es genügt das Abschicken eines Befehls im Terminal | |||
; Beispiel | |||
Als root | |||
sudo systemd-run --on-calendar="2022-01-30 20:01:35" touch /tmp/testfile | |||
Als normaler User | |||
systemd-run --user --on-calendar="2022-01-30 20:01:35" touch ~/testfile | |||
Diese Timer werden in den Verzeichnissen | |||
* '''/run/systemd/transient''' (systemweit) | |||
* und für Benutzer in '''/run/user/<uid>/systemd/transient''' angelegt | |||
Dabei wird standardmäßig ein zufälliger Name generiert | |||
* Man kann den Namen des Timers aber auch explizit mit der Option --unit= festlegen | |||
=== Genauigkeit === | |||
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 beispielsweise 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''' | |||
Aufgrund dieser Tatsache kann nicht eindeutig die verbleibende Zeit bis zum Trigger ermittelt werden | |||
* Dieser Umstand wird im [https://unix.stackexchange.com/a/526906/427268 unix.stackexchange] ausführlich beschrieben | |||
* Darüber hinaus gibt es noch die Möglichkeit mit RandomizedDelaySec eine absichtliche gleichverteilt zufällige Verzögerung zu erzeugen | |||
=== Timer stoppen/deaktivieren === | |||
; Stoppen | |||
Wie alle anderen Systemd-Units lassen sich Timer stoppen | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
sudo systemctl stop name_des_timers.timer | |||
</syntaxhighlight> | |||
; Deaktivieren | |||
Sofern Timer wiederkehrend mit dem System-Start aktiviert wurden, deaktiviert man sie unter Verwendung von | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
sudo systemctl disable name_des_timers.timer | |||
</syntaxhighlight> | |||
; systemd-run | |||
Bei mittels systemd-run angelegten Timern muss berücksichtigt werden, dass das System für diese zwei Dateien pro Timer generiert; eine mit der Endung '''.service''' und eine mit der Endung '''.timer''' | |||
Dementsprechend stopt man diese mittels | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
sudo systemctl stop name_des_timers.{service,timer} | |||
</syntaxhighlight> | |||
Die systemd-run-Timer werden damit auch gleichzeitig aus den betreffenden Verzeichnissen gelöscht, sodass sie gegebenenfalls durch erneutes Anlegen mittels systemd-run neu eingerichtet werden müssen | |||
== Konfiguration == | |||
=== Aufbau === | |||
; Aufbau eine Timer Unit | |||
[[Textdatei]] | |||
* Ähnlich einer [https://de.wikipedia.org/wiki/Initialisierungsdatei INI-Dateien] | |||
* Der Dateiname kann frei gewählt werden, muss aber auf '''.timer''' enden | |||
=== Selbsterstellte Timer === | |||
Selbsterstellte Timer werden | |||
* /etc/systemd/system | |||
* Root-Rechte erforderlich | |||
<syntaxhighlight lang="bash" highlight="1,4,9" line copy> | |||
[Unit] | |||
Description=Eine kurze Beschreibung des Timers | |||
[Timer] | |||
OnBootSec=2min | |||
OnUnitActiveSec=5min | |||
Unit=name_der_zu_startenden_unit.service | |||
[Install] | |||
WantedBy=multi-user.target | |||
</syntaxhighlight> | |||
=== Sektionen === | |||
{| class="wikitable options big" | |||
|- | |||
! Sektion !! Beschreibung | |||
|- | |||
| [Unit] || | |||
|- | |||
| [Timer] || | |||
|- | |||
| [Install] || | |||
|} | |||
Die Bedeutung der Sektionen ''"[Unit]"'' und ''"[Install]"'' | |||
* identisch mit der von [https://wiki.ubuntuusers.de/systemd/Service_Units/#Eigene-Service-Units-anlegen Service Units] | |||
* Die Sektion ''"[Timer]"'' enthält dabei die Informationen, wann die im Schlüssel Unit hinterlegte Unit ausgeführt werden soll | |||
; Beispiel | |||
würde die Unit namens '''name_der_zu_startenden_unit.service''' wie folgt 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 | |||
=== Dateien === | |||
{| class="wikitable options big" | |||
|- | |||
! Datei !! Beschreibung | |||
|- | |||
| || | |||
|- | |||
| || | |||
|} | |||
<noinclude> | |||
== Anhang == | |||
=== Siehe auch === | |||
<div style="column-count:2"> | |||
<categorytree hideroot=on mode="pages">systemd</categorytree> | |||
</div> | |||
---- | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}/}} | |||
=== Dokumentation === | |||
<!-- | |||
; Man-Page | |||
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)] | |||
; Info-Pages | |||
--> | |||
=== Links === | |||
==== Projekt ==== | |||
==== Weblinks ==== | |||
# http://www.freedesktop.org/software/systemd/man/systemd.timer.html | |||
# https://wiki.archlinux.org/index.php/Systemd/Timers | |||
# https://de.wikipedia.org/wiki/Systemd | # https://de.wikipedia.org/wiki/Systemd | ||
# https://de.wikipedia.org/wiki/Cron | # https://de.wikipedia.org/wiki/Cron | ||
# https://wiki.ubuntuusers.de/systemd/Timer_Units | |||
# https://wiki.ubuntuusers.de/systemd | |||
# [https://wiki.ubuntuusers.de/systemd/Service_Units/ Service Unit] | |||
{{DEFAULTSORT:systemd.timer}} | |||
{{DISPLAYTITLE:systemd.timer}} | |||
[[Kategorie:systemd]] | |||
[[Kategorie:cron]] | |||
</noinclude> | |||
Aktuelle Version vom 26. Oktober 2025, 09:36 Uhr
systemd.timer - Systemd Timer Units
Beschreibung
- Timer Unit
Beschreibt, wann eine Service Unit ausgeführt werden soll
- Aufgaben übernehmen, welche traditionell von Cron ausgeführt werden
- Flexibilität
Timer Units führen Befehle aus
- zu einem festen Zeitpunkt ("um Mitternacht")
- relativ zum Systemstart ("5 Minuten später")
Anwendung
Anzeige
Timer anzeigen
- System Timer
sudo systemctl list-timers
- Benutzern Timer
sudo systemctl --user list-timers
- Inaktive Timer
sudo systemctl --user list-timers --all
Aktivierung
Timer aktivieren
- Timer Units aktivieren
Nach der Erstellung müssen Timer Unitsaktiviert und gestartet werden
sudo systemctl enable name_des_timers.timer
sudo systemctl start name_des_timers.timer
Ausführungszeitpunkte
- Schlüssel für relative Ausführungszeitpunkte
| Schlüssel | Beschreibung |
|---|---|
| OnActiveSec | relativ zur letzten Timer-Unit-Aktivierung |
| OnBootSec | relativ zum letzten Neustart des Rechners |
| 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 |
- Absolute Zeitangaben
- Diese werden im Schlüssel OnCalendar angeben
- So würde z.B
- die folgende Timer Unit:
| 1
2 3 4 5 6 7 8 9 |
[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
- Zeitangaben
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
Verpasste Timer
- Verpasste Timer nachholen
Möchte man eine Timer-Unit auch nachträglich ausführen lassen
- also etwa falls der Rechner zum Zeitpunkt der Fälligkeit des Timers ausgeschaltet war
- muss man im Abschnitt [Timer] zusätzlich die Direktive
Persistent=true
setzen
- Voreinstellung
Die Voreinstellung von systemd ist hier false
- verpasste Timer werden nicht nachgeholt
- Die Direktive funktioniert nur in Kombination mit der OnCalendar Direktive, nicht mit anderen Direktiven für Zeitpunkte
at Ersatz
Neben den Aufgaben
die traditionell Cron erledigt
kann systemd auch die typische Aufgabe von at übernehmen
einen Job nur ein einziges mal zu einem bestimmten Zeitpunkt zu starten
- Es muss kein Script angelegt werden, sondern es genügt das Abschicken eines Befehls im Terminal
- Beispiel
Als root
sudo systemd-run --on-calendar="2022-01-30 20:01:35" touch /tmp/testfile
Als normaler User
systemd-run --user --on-calendar="2022-01-30 20:01:35" touch ~/testfile
Diese Timer werden in den Verzeichnissen
- /run/systemd/transient (systemweit)
- und für Benutzer in /run/user/<uid>/systemd/transient angelegt
Dabei wird standardmäßig ein zufälliger Name generiert
- Man kann den Namen des Timers aber auch explizit mit der Option --unit= festlegen
Genauigkeit
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 beispielsweise 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
Aufgrund dieser Tatsache kann nicht eindeutig die verbleibende Zeit bis zum Trigger ermittelt werden
- Dieser Umstand wird im unix.stackexchange ausführlich beschrieben
- Darüber hinaus gibt es noch die Möglichkeit mit RandomizedDelaySec eine absichtliche gleichverteilt zufällige Verzögerung zu erzeugen
Timer stoppen/deaktivieren
- Stoppen
Wie alle anderen Systemd-Units lassen sich Timer stoppen
sudo systemctl stop name_des_timers.timer
- Deaktivieren
Sofern Timer wiederkehrend mit dem System-Start aktiviert wurden, deaktiviert man sie unter Verwendung von
sudo systemctl disable name_des_timers.timer
- systemd-run
Bei mittels systemd-run angelegten Timern muss berücksichtigt werden, dass das System für diese zwei Dateien pro Timer generiert; eine mit der Endung .service und eine mit der Endung .timer
Dementsprechend stopt man diese mittels
sudo systemctl stop name_des_timers.{service,timer}
Die systemd-run-Timer werden damit auch gleichzeitig aus den betreffenden Verzeichnissen gelöscht, sodass sie gegebenenfalls durch erneutes Anlegen mittels systemd-run neu eingerichtet werden müssen
Konfiguration
Aufbau
- Aufbau eine Timer Unit
- Ähnlich einer INI-Dateien
- Der Dateiname kann frei gewählt werden, muss aber auf .timer enden
Selbsterstellte Timer
Selbsterstellte Timer werden
- /etc/systemd/system
- Root-Rechte erforderlich
[Unit]
Description=Eine kurze Beschreibung des Timers
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
Unit=name_der_zu_startenden_unit.service
[Install]
WantedBy=multi-user.target
Sektionen
| Sektion | Beschreibung |
|---|---|
| [Unit] | |
| [Timer] | |
| [Install] |
Die Bedeutung der Sektionen "[Unit]" und "[Install]"
- 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
- Beispiel
würde die Unit namens name_der_zu_startenden_unit.service wie folgt 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
Dateien
| Datei | Beschreibung |
|---|---|
Anhang
Siehe auch
Dokumentation
Links
Projekt
Weblinks
- http://www.freedesktop.org/software/systemd/man/systemd.timer.html
- https://wiki.archlinux.org/index.php/Systemd/Timers
- https://de.wikipedia.org/wiki/Systemd
- https://de.wikipedia.org/wiki/Cron
- https://wiki.ubuntuusers.de/systemd/Timer_Units
- https://wiki.ubuntuusers.de/systemd
- Service Unit