Zum Inhalt springen

Systemd.timer: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
 
(64 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
; Timer Units
; Timer Unit
[https://wiki.ubuntuusers.de/systemd/ systemd] ermöglicht, [[Timer Unit]]s zu erstellen
Beschreibt, wann eine [[Service Unit]] ausgeführt werden soll
* In einer [[Timer Unit]] kann hinterlegt werden, dass eine [https://wiki.ubuntuusers.de/systemd/Service_Units/ Service Unit] zu einem bestimmten Zeitpunkt ausgeführt wird
* Aufgaben übernehmen, welche traditionell von [[Cron]] ausgeführt werden


[[Timer Units]] können also Aufgaben übernehmen, welche traditionell von [https://wiki.ubuntuusers.de/Cron/ Cron] ausgeführt werden
; Flexibilität
* 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")
Timer Units führen Befehle aus
* zu einem festen Zeitpunkt ("um Mitternacht")
* relativ zum Systemstart ("5 Minuten später")


== Installation ==
== Anwendung ==
systemd ist ein integraler Bestandteil des Systems
=== Anzeige ===
* alle benötigten Komponenten sind standardmäßig installiert
Timer anzeigen
; System Timer
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo systemctl list-timers
</syntaxhighlight>


== Aufruf ==
; Benutzern Timer
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo systemctl --user list-timers
</syntaxhighlight>
</syntaxhighlight>


=== Optionen ===
; Inaktive Timer
{| class="wikitable sortable options gnu"
<syntaxhighlight lang="bash" highlight="1" line copy>
|-
sudo systemctl --user list-timers --all
! Unix !! GNU !! Parameter !! Beschreibung
|-
| || || ||
|-
|}
 
=== Parameter ===
 
=== Umgebungsvariablen ===
 
=== Exit-Status ===
{| class="wikitable options col1center"
|-
! Wert !! Beschreibung
|-
| 0 || Erfolg
|-
| >0 || Fehler
|}
 
== Anwendung ==
<syntaxhighlight lang="bash" highlight="1" line>
</syntaxhighlight>
</syntaxhighlight>


 
=== Aktivierung ===
 
Timer aktivieren
Timer Units werden als einfache Textdateien angelegt [https://wiki.ubuntuusers.de/systemd/Timer_Units/#source-2 [2]], mit einer Syntax und einem Aufbau ähnlich [https://de.wikipedia.org/wiki/Initialisierungsdatei INI-Dateien]
; Timer Units aktivieren
* Der Dateiname kann frei gewählt werden, muss aber auf '''.timer''' enden
Nach der Erstellung müssen Timer Unitsaktiviert und gestartet werden
* Selbsterstellte Timer werden im Verzeichnis '''/etc/systemd/system''' abgespeichert, wozu Root-Rechte[https://wiki.ubuntuusers.de/systemd/Timer_Units/#source-3 [3]] erforderlich sind
<syntaxhighlight lang="bash" highlight="1-2" line copy>
 
sudo systemctl enable name_des_timers.timer
=== Aufbau ===
sudo systemctl start name_des_timers.timer
; Aufbau eine Timer Unit
<syntaxhighlight lang="bash" highlight="1" line>
[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>
</syntaxhighlight>
; Sektionen
Es gibt drei Sektionen
* ''"[Unit]"''
* ''"[Timer]"'' und
* ''"[Install]"''
Die Bedeutung der Sektionen ''"[Unit]"'' und ''"[Install]"'' ist 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 <tt>Unit</tt> hinterlegte Unit ausgeführt werden soll
Im obigen Beispiel würde die Unit namens '''name_der_zu_startenden_unit.service''' wie folgt ausgeführt:
* <tt>OnBootSec=2min</tt> - erste Ausführung 2 Minuten nach Beginn des Bootvorgangs
* <tt>OnUnitActiveSec=5min</tt> - weitere Ausführungen jeweils 5 Minuten, nachdem die Service Unit zu letzten Mal gestartet wurde


=== Ausführungszeitpunkte ===
=== Ausführungszeitpunkte ===
Timer Units kennen fünf verschiedene Schlüssel für relative Ausführungszeitpunkte:
; Schlüssel für relative Ausführungszeitpunkte
 
{| class="wikitable options big"
{| class="wikitable options"
|-
|-
! Schlüssel !! Beschreibung
! Schlüssel !! Beschreibung
|-
|-
|| <tt>OnActiveSec</tt>
|| OnActiveSec
|| relative Zeit bezogen auf den Zeitpunkt, als die Timer Unit zuletzt aktiviert wurde
|| relativ zur letzten Timer-Unit-Aktivierung
|-
|-
|| <tt>OnBootSec</tt>
|| OnBootSec
|| relative Zeit bezogen auf den Zeitpunkt, als der Rechner gestartet wurde
|| relativ zum letzten Neustart des Rechners
|-
|-
|| <tt>OnStartupSec</tt>
|| OnStartupSec
|| relative Zeit bezogen auf den Zeitpunkt, als systemd gestartet wurde
|| relative Zeit bezogen auf den Zeitpunkt, als systemd gestartet wurde
|-
|-
|| <tt>OnUnitActiveSec</tt>
|| OnUnitActiveSec
|| relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt aktiviert wurde
|| relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt aktiviert wurde
|-
|-
|| <tt>OnUnitInactiveSec</tt>
|| OnUnitInactiveSec
|| relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt deaktiviert wurde
|| relative Zeit bezogen auf den Zeitpunkt, als die Service Unit zuletzt deaktiviert wurde
|-
|-
|}
|}


Außerdem kennen Timer Units noch absolute Zeitangaben
; Absolute Zeitangaben
* Diese werden im Schlüssel <tt>OnCalendar</tt> angeben
* Diese werden im Schlüssel OnCalendar angeben
* So würde z.B
* So würde z.B
* die folgende Timer Unit:
* die folgende Timer Unit:


{| class="wikitable options"
{| class="wikitable options big"
|-
|-
|| 1
|| 1
Zeile 132: Zeile 91:
die Service Unit '''name_der_zu_startenden_unit.service''' an jedem Tag von Montag bis Freitag um 12 Uhr ausführen
die Service Unit '''name_der_zu_startenden_unit.service''' an jedem Tag von Montag bis Freitag um 12 Uhr ausführen


=== Zeitangaben ===
; Zeitangaben  
Die Timer von systemd kennen eine Vielzahl von Zeiteinheiten
Die Timer von systemd kennen eine Vielzahl von Zeiteinheiten
* Die kleinste Zeiteinheit sind Mikrosekunden, die größte Jahre
* 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
* 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 <tt>OnCalendar</tt> Schlüssel kennt systemd eine flexible Syntax zur Zeitangabe
Für die Werte des OnCalendar Schlüssel kennt systemd eine flexible Syntax zur Zeitangabe
* So steht z.B
* So steht z.B
* der Wert <tt>Thu,Fri 2016-*-1,5 11:12:13</tt> für:
* der Wert Thu,Fri 2016-*-1,5 11:12:13 für:
* am 1
* am 1
* und 5
* und 5
Zeile 147: Zeile 106:
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
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 nachholen ===
=== Verpasste Timer ===
Möchte man eine Timer Unit auch noch nachträglich ausführen lassen, also z.B
; Verpasste Timer nachholen
* falls der Rechner zum Zeitpunkt der Fälligkeit des Timers ausgeschaltet war, muss man im Abschnitt <tt>[Timer]</tt> zusätzlich die Direktive
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
  Persistent=true
setzen


setzen
; Voreinstellung
* Die Voreinstellung von systemd ist hier <tt>false</tt>, d.h
Die Voreinstellung von systemd ist hier false
* verpasste Timer werden nicht nachgeholt
* verpasste Timer werden nicht nachgeholt
* Die Direktive funktioniert nur in Kombination mit der <tt>OnCalendar</tt> Direktive, nicht mit anderen Direktiven für Zeitpunkte
* Die Direktive funktioniert nur in Kombination mit der OnCalendar Direktive, nicht mit anderen Direktiven für Zeitpunkte
 
=== at Ersatz ===
Neben den Aufgaben


=== Timer Units aktivieren ===
die traditionell [https://wiki.ubuntuusers.de/Cron/ Cron] erledigt
Nach dem Erstellen müssen Timer Units noch aktiviert und gestartet werden[https://wiki.ubuntuusers.de/systemd/Timer_Units/#source-1 [1]]:
sudo systemctl enable name_des_timers.timer
sudo systemctl start name_des_timers.timer


=== at Ersatz ===
kann systemd auch die typische Aufgabe von [https://wiki.ubuntuusers.de/at/ at] übernehmen
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
 
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
* Es muss kein Script angelegt werden, sondern es genügt das Abschicken eines Befehls im Terminal
* Beispiel:


<nowiki># als root</nowiki>
; Beispiel
sudo systemd-run --on-calendar="2022-01-30 20:01:35" touch /tmp/testfile
Als root
<nowiki># als normaler User</nowiki>
sudo systemd-run --on-calendar="2022-01-30 20:01:35" touch /tmp/testfile
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
Als normaler User
* Dabei wird standardmäßig ein zufälliger Name generiert
systemd-run --user --on-calendar="2022-01-30 20:01:35" touch ~/testfile
* Man kann den Namen des Timers aber auch explizit mit der Option <tt>--unit=</tt> festlegen
 
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 ===
=== 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
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 <tt>AccuracySec</tt> angeben, gefolgt von einer Zeitangabe
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. <tt>AccuracySec=5s</tt> die Genauigkeit auf 5 Sekunden setzen
* 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'''
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'''
Zeile 186: Zeile 153:
Aufgrund dieser Tatsache kann nicht eindeutig die verbleibende Zeit bis zum Trigger ermittelt werden
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
* 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 <tt>RandomizedDelaySec</tt> eine absichtliche gleichverteilt zufällige Verzögerung zu erzeugen
* Darüber hinaus gibt es noch die Möglichkeit mit RandomizedDelaySec eine absichtliche gleichverteilt zufällige Verzögerung zu erzeugen
 
=== Timer anzeigen ===
Man kann sich alle aktiven Timer mit Hilfe von [https://wiki.ubuntuusers.de/systemd/systemctl/ systemctl] wie folgt anzeigen lassen:
 
<nowiki># Systemweite Timer:</nowiki>
systemctl list-timers
 
<nowiki># Von Benutzern angelegte Timer:</nowiki>
systemctl --user list-timers
 
Möchte man zusätzlich die inaktiven Timer sehen, muss man dem Befehl noch die Option <tt>--all</tt> hinzufügen
 
=== Timer stoppen und deaktivieren ===
Wie alle anderen Systemd-Units lassen sich Timer mittels,


=== 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
sudo systemctl stop name_des_timers.timer
</syntaxhighlight>


stoppen
; Deaktivieren
 
Sofern Timer wiederkehrend mit dem System-Start aktiviert wurden, deaktiviert man sie unter Verwendung von
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
sudo systemctl disable name_des_timers.timer
</syntaxhighlight>


Bei mittels <tt>systemd-run</tt> 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'''
; systemd-run
* Dementsprechend stopt man diese mittels:
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}
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


Die <tt>systemd-run</tt>-Timer werden damit auch gleichzeitig aus den betreffenden Verzeichnissen gelöscht, so dass sie gegebenenfalls durch erneutes Anlegen mittels <tt>systemd-run</tt> neu eingerichtet werden müssen
=== 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>


=== Problembehebung ===
=== Sektionen ===
{| class="wikitable options big"
|-
! Sektion !! Beschreibung
|-
| [Unit] ||
|-
| [Timer] ||
|-
| [Install] ||
|}


== Konfiguration ==
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 ===
=== Dateien ===
{| class="wikitable options"
{| class="wikitable options big"
|-
|-
! Datei !! Beschreibung
! Datei !! Beschreibung
Zeile 238: Zeile 238:


=== Siehe auch ===
=== Siehe auch ===
<div style="column-count:3">
<div style="column-count:2">
<categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree>
<categorytree hideroot=on mode="pages">systemd</categorytree>
</div>
</div>
----
----
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
=== Dokumentation ===
=== Dokumentation ===
 
<!--
; Man-Page
; Man-Page
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]


; Info-Pages
; Info-Pages
-->


=== Links ===
=== Links ===
Zeile 254: Zeile 256:


==== Weblinks ====
==== Weblinks ====
# [http://www.freedesktop.org/software/systemd/man/systemd.timer.html Dokumentation] von systemd Timer Units
# http://www.freedesktop.org/software/systemd/man/systemd.timer.html
# [https://wiki.archlinux.org/index.php/Systemd/Timers#Example systemd Timer] im Wiki von Archlinux
# 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}}
{{DEFAULTSORT:systemd.timer}}
Zeile 263: Zeile 268:


[[Kategorie:systemd]]
[[Kategorie:systemd]]
[[Kategorie:cron]]


</noinclude>
</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

Textdatei

  • Ä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

  1. http://www.freedesktop.org/software/systemd/man/systemd.timer.html
  2. https://wiki.archlinux.org/index.php/Systemd/Timers
  3. https://de.wikipedia.org/wiki/Systemd
  4. https://de.wikipedia.org/wiki/Cron
  5. https://wiki.ubuntuusers.de/systemd/Timer_Units
  6. https://wiki.ubuntuusers.de/systemd
  7. Service Unit