So verwenden Sie Systemd-Timer als Cron-Ersatz

Als Linux-Benutzer sind Sie wahrscheinlich mit cron vertraut. Es hat sich viele Jahre lang als zeitbasierter Job-Scheduler unter Unix bewährt. Jetzt verwenden viele Benutzer Systemd-Timer, um die Dominanz von Cron zu ersetzen. In diesem Artikel werden die Grundlagen zum Einrichten Ihres eigenen systemd-Timers und zum Sicherstellen, dass er auf Ihrem System ordnungsgemäß läuft, erläutert.

Warum Systemd-Timer anstelle von Cron verwenden?

Eines der größten Verkaufsargumente von Systemd Timers ist, dass es vollständig in das Systemd-Ökosystem integriert ist. Dies bedeutet, dass es sehr einfach ist, verschiedene Systemd-Diensteinheiten zu planen und miteinander zu verknüpfen, was die Automatisierung von Aufgaben im Vergleich zu einem herkömmlichen Cron-Daemon erleichtert.

Ein weiterer Vorteil von Systemd-Timern gegenüber Cron besteht darin, dass es eine detailliertere Kontrolle darüber bietet, wie Ihre geplanten Jobs ausgelöst werden. Systemd-Timer verfügen beispielsweise über eine OnBootSec-Variable, mit der Sie Ihre Serviceeinheit verzögern können, bis nach einem erfolgreichen Start eine bestimmte Zeit verstrichen ist.

Schließlich sind Systemd-Timer im Vergleich zu einem Standard-Cron-Daemon auch unglaublich genau. Standardmäßig kann es mithilfe seiner AccuracySec-Variablen Jobs bis zu einer Mikrosekunde verfolgen und ausführen. Dies ist unglaublich hilfreich, wenn Sie einen Computer betreiben, der für seine geplanten Aufgaben genaue Zeitvorgaben benötigt.

Gut zu wissen: Suchen Sie immer noch nach dem richtigen Task-Scheduling-Daemon? Schauen Sie sich unsere Liste der besten Cron-Alternativen an, die Sie noch heute installieren können.

Installieren von Systemd-Timern

Timer sind eine integrierte Funktion von Systemd. Das heißt, wenn Sie Systemd als Init-Daemon verwenden, wie es bei beliebten Linux-Distributionen wie Arch, Fedora und Ubuntu der Fall ist, nutzt Ihr Computer diese Funktion bereits bei einigen seiner Systemprozesse.

[enlazatom_show_links]

Um zu überprüfen, ob Ihre Distribution Systemd ausführt, können Sie den folgenden Befehl ausführen:

Dadurch werden alle Systemd-Einheiten, Geräte und Timer aufgelistet, die derzeit auf Ihrem System ausgeführt werden.

Vorhandene Timer auflisten

Ob ein Timer auf Ihrem aktuellen Benutzerkonto läuft, können Sie am einfachsten mit dem folgenden Befehl überprüfen:

Sie können auch das Flag --all verwenden, um jeden einzelnen Timer im System zu überprüfen, einschließlich der inaktiven:

systemctl list-timers --all

Dadurch werden das Datum und die Uhrzeit der Aktivierung jedes Timers, der Countdown bis zu diesem Zeitpunkt, die seit seiner letzten Ausführung vergangene Zeit, der Gerätename des Timers selbst und der Dienst, den jede Timer-Einheit aktiviert, ausgedruckt.

Gut zu wissen: Erfahren Sie, wie Sie mit chkservice problemlos mehrere Systemd-Einheiten verwalten und steuern.

Erstellen eines neuen Dienstes und Timers

Der erste Schritt beim Erstellen eines Systemd-Timers besteht darin, einen vorhandenen Dienst zu erstellen oder zu finden, an den er angeschlossen werden kann. Dies liegt daran, dass jeder Timer an eine übergeordnete Serviceeinheit angeschlossen werden muss. Dieser Abschnitt führt Sie durch den Prozess der Erstellung eines Timers für einen benutzerdefinierten Systemd-Dienst.

Erstellen Sie zunächst die leeren Dateien „.service“ und „.timer“ in Ihrem Home-Verzeichnis:

Berühren Sie ~/my-new-timer. {Dienst,Timer}

Öffnen Sie Ihre neue Servicedatei mit Ihrem bevorzugten Texteditor:

nano ~/my-new-timer.service

Fügen Sie die folgende Vorlage in Ihre neue Servicedatei ein:

[Unit]

Name=Mein neuer Dienst Beschreibung=Die Unit-Datei für meinen benutzerdefinierten Befehl.

[Service]
Type=oneshot User=ramces WorkingDirectory=/home/ramces/ ExecStart=/home/ramces/.local/bin/my-script.sh

[Install]
WantedBy=multi-user.target

Speichern Sie Ihre „.service“-Datei und öffnen Sie dann Ihre leere „.timer“-Datei mit demselben Texteditor:

nano ~/my-new-timer.timer

Fügen Sie den folgenden Codeblock in Ihre Timer-Datei ein:

[Unit]

Name=Mein neuer Dienst Beschreibung=Der Timer für meinen benutzerdefinierten Befehl.

[Timer]
Unit=my-new-timer.service OnCalendar=*-*-* 11:43:00 Persistent=true

[Install]
WantedBy=timers.target

Gehe zum [Timer] Ersetzen Sie dann den Wert der OnCalendar-Variablen durch das Datum und die Uhrzeit, zu der Ihre Systemd-Einheit ausgeführt werden soll. In meinem Fall möchte ich, dass mein Programm jeden Tag genau um 11:43 Uhr läuft.

Notiz: Die drei Sternchen vor dem Wert „11:43:00“ stehen für Jahr, Monat und Tag. Wenn Sie diesen Wert beispielsweise auf „15.09.24“ setzen, wird Systemd angewiesen, Ihren Dienst nur einmal am 15. September 2024 auszuführen.

Erstellen eines monotonen Timers

Neben der Einstellung eines Timers, der an einem bestimmten Datum läuft, ist es auch möglich, einen monotonen Timer zu erstellen, der relativ zur aktuellen Betriebszeit Ihres Computers läuft. Dies ist nützlich, wenn Sie eine Aufgabe auf einem Computer planen, der nicht ständig ausgeführt wird, beispielsweise auf einem Desktop oder Laptop.

Öffnen Sie zunächst Ihre „.timer“-Datei und scrollen Sie dann nach unten [Timer] Abschnitt.

Entfernen Sie sowohl die Variablen „OnCalendar“ als auch „Persistent“ und fügen Sie dann „OnBootSec“ gefolgt von einem Zeitintervall für die Ausführung Ihrer Unit-Datei hinzu. Wenn Sie den Wert beispielsweise auf „1 Stunde“ setzen, wird Systemd angewiesen, Ihren Befehl eine Stunde nach dem erfolgreichen Hochfahren Ihres Computers zu starten.

Fügen Sie die Variable „OnUnitActiveSec“ direkt unter „OnBootSec“ hinzu und geben Sie dann das Intervall an, in dem Ihr Timer nach dem Systemstart kontinuierlich laufen soll. In meinem Fall stelle ich den Wert auf „30 Minuten“, da ich möchte, dass meine Aufgabe nach der ersten Ausführung alle 30 Minuten ausgeführt wird.

Erstellen eines Transienten-Timers

Einer der Vorteile der tiefen Integration des Systemd-Timers in Systemd besteht darin, dass er die Vorteile der anderen angrenzenden Programme des Init-Daemons nutzen kann. Beispielsweise ist es möglich, Timer mit Systemd-run zu verwenden, um einmalige vorübergehende Jobs auf Ihrem Computer zu erstellen.

Um einen einfachen temporären Timer zu erstellen, fügen Sie die folgende Codezeile in eine Terminalsitzung ein und ersetzen Sie dann den Wert der Variablen --on-calendar durch das Intervall, in dem Ihr Befehl ausgeführt werden soll:

sudo systemd-run --on-calendar="*-*-* 11:46:00"

Hängen Sie den Befehl, den Sie ausführen möchten, am Ende der Zeile an und drücken Sie dann die Eingabetaste, um ihn zu planen.

sudo systemd-run --on-calendar="*-*-* 11:46:00" /home/ramces/.local/my-script.sh

Sie können auch temporäre monotone Timer erstellen, indem Sie die Variablen --on-boot und --on-unit-active verwenden:

sudo systemd-run --on-boot="1hr" --on-unit-active="30m" /home/ramces/.local/my-script.sh

Bestätigen Sie, dass Ihr temporärer Timer jetzt im Jobplaner von Systemd in der Warteschlange steht, indem Sie den folgenden Befehl ausführen:

sudo systemctl status run*.timer

Nebenbei bemerkt: Systemd-run ist mehr als nur eine Möglichkeit, temporäre Timer unter Linux zu erstellen. Erfahren Sie, wie Sie es mit Run0 als Sudo-Alternative verwenden können.

Ausführen des Systemd-Timers

Um Ihren neuen Systemd-Timer auszuführen, müssen Sie sicherstellen, dass er ordnungsgemäß in Ihre aktuelle Systemd-Sitzung geladen ist. Kopieren Sie dazu sowohl Ihren benutzerdefinierten Dienst als auch Ihre Timer-Datei in das Dienstverzeichnis Ihres Systemd:

sudo cp /home/ramces/my-new-timer. {service,timer} /etc/systemd/system/

Laden Sie die aktuelle Konfiguration des Init-Daemons neu:

sudo systemctl daemon-reload

Aktivieren Sie sowohl den Dienst als auch den Timer, den Sie mit systemctl erstellt haben:

sudo systemctl enable my-new-timer.servicebr>sudo systemctl enable --now my-new-timer.timer

Überprüfen Sie, ob Sie Ihren neuen Timer ordnungsgemäß geladen haben, indem Sie in einer neuen Terminalsitzung Folgendes ausführen: sudo systemctl status my-new-timer.timer. In diesem Fall können Sie sehen, dass mein Timer jetzt geplant und für die Ausführung des Systems vorbereitet ist.

Zu lernen, wie man Aufgaben mit Systemd-Timern plant, ist nur ein Teil des Verständnisses, wie Ihr Linux-Rechner unter der Haube funktioniert. Tauchen Sie tiefer in die Interna dieses wunderbaren Betriebssystems ein, indem Sie sich unseren Vergleichsartikel zu Grub und Systemd-boot ansehen.

Alexandr Podvalny über Unsplash. Alle Änderungen und Screenshots von Ramces Red.

Index
  1. Warum Systemd-Timer anstelle von Cron verwenden?
  2. Installieren von Systemd-Timern
  3. Vorhandene Timer auflisten
  4. Erstellen eines neuen Dienstes und Timers
  5. Erstellen eines monotonen Timers
  6. Erstellen eines Transienten-Timers
  7. Ausführen des Systemd-Timers

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Go up