Login
Newsletter
Werbung

Do, 27. Februar 2020, 15:00

Systemd Timer Units für zeitgesteuerte Aufgaben verwenden

Dieses Tutorial zeigt die Verwendung von Systemd Timer Units und was sie im Vergleich zu Cron auszeichnet.

Wenn es darum geht, Jobs in Linux aufzusetzen, war Cron immer führend. Ich denke nicht, dass Cron bereits abgesetzt ist, aber Systemd-Timer haben ihre Vorzüge. In diesem Tutorial erläutern wir Systemd-Timer und vergleichen sie mit Cron-Jobs. Wir präsentieren außerdem ein vollständiges Beispiel zum Erstellen eines Systemd-Timers und geben einige Hinweise für einen reibungslosen Übergang von Cron.

Hinweis:: Ein weiterer Artikel befasst sich mit Systemd Path Units.

Systemd Timer Units contra Cron

Während Systemd Timer Units verwendet werden können, um Jobs ähnlich wie Cron zu planen, gibt es spezifische Vor- und Nachteile beider Systeme.

Systemd Timer Units sind im Grunde Systemd-Dienste mit all ihren Möglichkeiten und Vorzügen, darunter unter anderem::

  • Jobs können Abhängigkeiten haben (von anderen Systemd-Diensten abhängen).
  • Timer Units werden im Systemd-Journal geloggt.
  • Man kann einen Job sehr einfach unabhängig von seinem Timer aufrufen.
  • Man kann Timer Units einen Nice-Wert geben oder cgroups für die Ressourcenverwaltung nutzen.
  • Systemd Timer Units können von Ereignissen wie dem Booten oder Hardware-Änderungen ausgelöst werden.
  • Sie können auf einfache Weise mit systemctl aktiviert oder deaktiviert werden.
  • Timer Units können die echte oder die monotone Zeit verwenden.

Cron hat seinerseits zwei klare Vorzüge gegenüber Systemd-Timern.

  • Die Konfiguration eines Cron-Jobs ist ein einfacher Vorgang.
  • Cron kann E-Mails mit Hilfe der MAILTO-Variablen senden.

Anlegen einer Timer Unit

In diesem Abschnitt erstellen wir eine Timer-Unit, um das Home-Verzeichnis auf ein USB-Laufwerk zu sichern, wenn das System bootet, und dann alle 24 Stunden, während es läuft. Um eine Timer-Unit zu erstellen, benötigen wir drei Dinge.

  • Skript, das von der Service-Unit ausgeführt wird.
  • Service-Unit-Datei.
  • Timer-Unit-Datei.

Schreiben eines Skripts, das rsync ausführt

Wir erstellen die folgende Datei in /usr/local/bin und nennen sie my-rsync.sh.

#!/bin/bash
rsync -aP /home/ /mnt/usb/

Dieses Skript muss ausführbar gemacht werden:

chmod +x /usr/local/bin/my-rsync.sh

Erstellen der Service-Unit-Datei zum Ausführen des Skripts

Die Service-Unit ist verantwortlich dafür, das Skript in Systemd auszuführen. In diesem Beispiel erstellen wir der Einfachheit halber die Service-Unit nur mit einer grundlegenden Konfiguration.

Wir erstellen eine Datei my-rsync.service im Verzeichnis /etc/systemd/system mit den folgenden Zeilen:

[Unit]
Description="A script to backup all home dirs to usb drive"

[Service]
ExecStart=/usr/local/bin/my-rsync.sh

Erstellen der Timer-Unit-Datei

Die letzte benötigte Datei ist die Timer-Datei, die definiert, wann der Service ausgeführt werden soll. Eine Timer-Datei wird im selben Verzeichnis wie ihre zugehörige Service-Datei angelegt und sollte denselben Namen haben, allerdings mit der Erweiterung .timer statt .service.

Wir erstellen eine Datei my-rsync.timer in /etc/systemd/system mit den folgenden Zeilen:

[Unit]
Description="Backs up the home directory"

[Timer]
OnBootSec=3min
OnUnitActiveSec=24h
Unit=my-rsync.service

[Install]
WantedBy=multi-user.target

OnBootSec ist die Zeit, die nach dem Booten gewartet werden soll. OnUnitActiveSec definiert die Zeit relativ zu der Zeit, als die Unit zum letzten Mal aktiviert wurde. WantedBy setzt im Wesentlichen eine Abhängigkeit, die dafür sorgt, dass unser Timer erst startet, wenn das System das multi-user target (Runlevel 3) erreicht hat.

Pro-Linux
Pro-Linux @Twitter
Neue Nachrichten
Werbung