Meist automatisiert man unter Linux diverse wiederkehrende Aufgaben mit der System-Software Cron, die lässt sich jedoch auch problemlos mit Systemd erledigen. Hierzu nutzt man Units des Typs „.timer„.

So lassen sich etwa zeitgesteuerte Backups und vieles mehr mit Systemd automatisch ausführen. Der Vorteil von mit Systemd-gesteuerten Aufgaben – diese können unter anderem schon während des Starts des Systems durchgeführt werden, oder beim Herunterfahren, …

Zeitgesteuerte Aufgaben mit Systemd anlegen

Zwei Schritte sind notwendig um solche Aufgaben zu erstellen – besser gesagt müssen zwei Dateien angelegt werden:

  • Service-Unit – Mit dieser wird dem System gezeigt, was eigentlich ausgeführt werden soll
  • Timer-Unit – Mit dieser zeigt man dem System wann die Aufgabe ausgeführt werden soll

Beginnen wir mit der Service-Unit, solche vom Nutzer erstellten Dateien liegen unter „/etc/systemd/user/„, möglich wäre natürlich auch das Unterverzeichnis/etc/systemd/system/“ – erstellt wird eine solche Datei am einfachsten gleich einmal mit dem Terminal-Editor Nano – natürlich als Administrator:

nano /etc/systemd/user/bezeichnung.service

Ein sehr einfaches Beispiel für eine solche Datei:

[Unit]
Description=System-Backup (Backup des kompletten Systems)

[Service]
ExecStart=/pfad/zum/backup.sh

In diesem Fall würde Systemd die Service-Unit (in diesem Beispiel mit dem Namen „bezeichnung.service) einfach beim Start des Systems starten – dies könnte den Start des Systems jedoch verlangsamen, deshalb erstellt man sich zusätzlich die Timer-Unit.

Mit Strg+o speichern wir die Datei, bestätigen mit Eingabe und schließen den Editor mit Strg+x. Mit „Description=“ gibt man eine Beschreibung des Services an, mit „ExecStart=“ wird angegeben was gestartet werden soll.

Nun gehen wir weiter zur Timer-Unit – diese hat im selben Verzeichnis zu liegen wie die Service-Unit und hat denselben Namen zu tragen. Da sich in diesem Beispiel die Service-Unit „bezeichnung.service“ nennt wird sich die Timer-Unit „bezeichnung.timer“ nennen:

nano /etc/systemd/user/bezeichnung.timer
[Unit]
Description=System-Backup (Backup des kompletten Systems)

[Timer]
OnCalendar=*-*-* 20:15:00
Persistent=true
RandomizeDelaySec=20m

Unter „Description=“ geben wir wieder dieselbe Beschreibung wie in der Service-Unit an – wichtig ist nun vor allem der Abschnitt „[Timer]“ – mit diesem geben Sie an wann die Aufgabe in der Service-Unit gestartet werden soll. In diesem Beispiel „OnCalendar=*-*-* 20:15:00“ würde die Aufgabe täglich – also bei jedem Systemstart „*-*-*“ um „20:15:00“ ausgeführt werden.

Statt täglich – also „*-*-*“ können Sie auch genauere Angaben machen, hierzu ist folgende Syntax nötig:

Wochentag Jahr-Monat-Tag Stunde:Minute:Sekunde

Ein kleines Beispiel:

Fr 2021-09-30 20:15:00

Die Sternchen ersetzen also die Angabe, wird statt der Angabe des Jahres ein Sternchen „*“ gesetzt wird die Aufgabe jedes Jahr ausgeführt, das zweite Sternchen ersetzt das Monat – die Aufgabe wird jedes Monat ausgeführt und das letzte ersetzt den Tag – also täglich. Das Beispiel oben sollten Sie nicht ganz so ernst nehmen – es dient nur als Beispiel – fällt der 30. nicht auf einen Freitag, wird auch die Aufgabe nicht ausgeführt.

Gibt man eine konkrete Zeit an – wie im Beispiel oben und der Rechner läuft zu dieser Zeit nicht, sogt der Eintrag „Persistent=true“ dafür, dass die Aufgabe beim nächsten Systemstart so schnell wie möglich nachgeholt wird. Beim Systemstart werden jedoch viele Services gleichzeitig gestartet – noch eines mehr würde den Start verlangsamen. Hier sorgt der Eintrag „RandomizeDelaySec=20m“ dafür, dass die Aufgabe 20 Minuten (20m) nach dem Start des Systems ausgeführt wird. Eine Stunde nach dem Start „1h„, 40 Sekunden danach „40s“ und so weiter und so fort.

Neben der Angabe eines konkreten Datums mit Uhrzeit lassen sich Services natürlich auch wiederkehrend ausführen, ein Beispiel, das auf dem oberen aufbaut:

[Unit]
Description=System-Backup (Backup des kompletten Systems)

[Timer]
OnBootSec=5m
Persistent=true
RandomizeDelaySec=20m

Die Angabe „OnBootSec=“ gibt an, dass die Aufgabe 5 Minuten „5m“ nach dem Start auszuführen ist. Dies könnte man noch erweitern – etwa:

[Unit]
Description=System-Backup (Backup des kompletten Systems)

[Timer]
OnBootSec=5m
OnUnitActiveSec=1w
Persistent=true
RandomizeDelaySec=20m

Hier gibt der Eintrag „OnUnitActiveSec=“ an, dass der Service ab dem ersten Start wöchentlich „1w„, oder täglich „1t“ ausgeführt wird.

Auch „OnCalendar=“ können Sie anpassen, so wird mit:

OnCalendar=daily

die Aufgabe täglich ausgeführt, weitere Möglichkeiten wären „weekly„, „minutely“ und „hourly„. Soll die Aufgabe direkt beim Systemstart ausgeführt werden – etwa um ein Programm zu starten, setzen Sie folgenden Code hinzu:

[Install]
WantedBy=timers.target

Für das oberste Beispiel also:

[Unit]
Description=System-Backup (Backup des kompletten Systems)

[Timer]
OnCalendar=*-*-* 20:15:00
Persistent=true
RandomizeDelaySec=20m

[Install]
WantedBy=timers.target

Dieses Beispiel ist natürlich nicht ganz ernst zu nehmen – zuletzt aktivieren Sie nach der Erstellung die Timer-Unit mit dem Befehl:

systemctl enable bezeichnung.timer

Alternativ lässt sich dieser auch manuell starten:

systemctl start bezeichnung.timer

Categories:

Tags:

Schreibe einen Kommentar

Noch keine Reaktion

Neue Themen im Forum
Debian installieren - für Anfänge …Hallo, jetzt gelingt mir die Installation auch über "Insta … Weiterlesen
Frage zu GrubDanke @juhu, das war für mich eine reine Verständnisfrage allge … Weiterlesen
Brother Drucker unter LinuxMit der Suche nach „Linux Brother HL-2030“ fand ich zur Seite htt … Weiterlesen
Kategorien im Wiki
WIKI-Beiträge des Monates

Die Beiträge des Monates finden Sie im Kalender unter den blau markierten Tageszahlen.

September 2023
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  
Archive