Verwenden von Systemd-Timern als Ersatz für Cron-Jobs
Als Linux-Benutzer sind Sie wahrscheinlich mit Cron vertraut. Es hat viele Jahre lang als zeitbasierter Job-Scheduler unter Unix funktioniert. Jetzt verwenden viele Benutzer Systemd-Timer, um die Dominanz von Cron zu ersetzen. In diesem Artikel werden die Grundlagen erläutert, wie Sie Ihren eigenen Systemd-Timer einrichten und sicherstellen, dass er auf Ihrem System ordnungsgemäß ausgeführt wird.
Warum Systemd-Timer statt Cron verwenden?
Einer der größten Verkaufsargumente von Systemd Timers ist, dass es vollständig in das Systemd-Ökosystem integriert ist. Das bedeutet, dass es sehr einfach ist, verschiedene Systemd-Serviceeinheiten zu planen und miteinander zu verknüpfen, was die Automatisierung von Aufgaben im Vergleich zu einem herkömmlichen Cron-Daemon einfacher macht.
Ein weiterer Vorteil von Systemd-Timern gegenüber Cron besteht darin, dass sie eine detailliertere Kontrolle darüber bieten, wie Ihre geplanten Jobs ausgelöst werden. Beispielsweise verfügen Systemd-Timer über eine OnBootSec
Variable, mit der Sie Ihre Serviceeinheit verzögern können, bis nach einem erfolgreichen Start eine bestimmte Zeitspanne verstrichen ist.
Schließlich sind Systemd-Timer im Vergleich zu einem Standard-Cron-Daemon auch unglaublich genau. Standardmäßig kann er mithilfe seiner AccuracySec
Variablen Jobs bis auf eine Mikrosekunde genau verfolgen und ausführen. Dies ist unglaublich hilfreich, wenn Sie einen Computer betreiben, der genaue Zeitangaben für seine geplanten Aufgaben benötigt.
Installieren von Systemd-Timern
Timer sind eine integrierte Funktion von Systemd. Das bedeutet, dass Ihr Computer diese Funktion bereits für einige seiner Systemprozesse nutzt, wenn Sie Systemd als Init-Daemon verwenden, wie dies bei beliebten Linux-Distributionen wie Arch, Fedora und Ubuntu der Fall ist.
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 auf Ihrem aktuellen Benutzerkonto ein Timer läuft, können Sie am einfachsten mit dem folgenden Befehl überprüfen:
Sie können das --all
Flag auch verwenden, um jeden einzelnen Timer im System zu überprüfen, einschließlich der inaktiven:
Dadurch werden Datum und Uhrzeit der Aktivierung jedes Timers, der Countdown bis zu diesem Zeitpunkt, die seit der letzten Ausführung vergangene Zeit, der Einheitenname des Timers selbst und der Dienst, den jede Timereinheit aktiviert, ausgedruckt.
Erstellen eines neuen Dienstes und Timers
Der erste Schritt beim Erstellen eines Systemd-Timers besteht darin, entweder einen Dienst zu erstellen oder einen vorhandenen zu finden, an den er angehängt werden kann. Dies liegt daran, dass jeder Timer an eine übergeordnete Diensteinheit angehängt werden muss. Dieser Abschnitt führt Sie durch den Prozess zum Erstellen eines Timers für einen benutzerdefinierten Systemd-Dienst.
Beginnen Sie mit der Erstellung der leeren Dateien „.service“ und „.timer“ in Ihrem Home-Verzeichnis:
Öffnen Sie Ihre neue Servicedatei mit Ihrem bevorzugten Texteditor:
Fügen Sie die folgende Vorlage in Ihre neue Servicedatei ein:
Speichern Sie Ihre „.service“-Datei und öffnen Sie dann Ihre leere „.timer“-Datei mit demselben Texteditor:
Fügen Sie den folgenden Codeblock in Ihre Timerdatei ein:
Gehen Sie zum [Timer]
Abschnitt und 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 ausgeführt wird.
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 läuft, z. B. auf einem Desktop oder einem Laptop.
Öffnen Sie zunächst Ihre „.timer“-Datei und scrollen Sie dann nach unten zum [Timer]
Abschnitt.
Entfernen Sie die Variablen OnCalendar
und und fügen Sie dann ein Zeitintervall hinzu, in dem Sie Ihre Unit-Datei ausführen möchten. Wenn Sie beispielsweise „1hr“ festlegen, wird Systemd angewiesen, Ihren Befehl eine Stunde nach dem erfolgreichen Start Ihres Computers auszuführen.Persistent
OnBootSec
Fügen Sie die OnUnitActiveSec
Variable direkt darunter hinzu OnBootSec
und geben Sie dann das Intervall an, in dem Ihr Timer nach dem Systemstart kontinuierlich laufen soll. In meinem Fall stelle ich es auf „30min“, da ich möchte, dass meine Aufgabe nach dem ersten Durchlauf alle 30 Minuten ausgeführt wird.
Erstellen eines transienten Timers
Einer der Vorteile der tiefen Integration von Systemd Timer in Systemd besteht darin, dass es die anderen angrenzenden Programme des Init-Daemons nutzen kann. So ist es beispielsweise 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 --on-calendar
Variablen durch das Intervall, in dem Ihr Befehl ausgeführt werden soll:
Fügen Sie den Befehl, den Sie ausführen möchten, am Ende der Zeile an und drücken Sie dann , Enterum ihn zu planen.
Sie können auch temporäre monotone Timer erstellen, indem Sie die Variablen --on-boot
und --on-unit-active
verwenden:
Bestätigen Sie, dass Ihr temporärer Timer jetzt in der Warteschlange des Job-Schedulers von Systemd steht, indem Sie den folgenden Befehl ausführen:
Ausführen des Systemd-Timers
Um Ihren neuen Systemd-Timer auszuführen, müssen Sie sicherstellen, dass er in Ihrer aktuellen Systemd-Sitzung ordnungsgemäß geladen wird. Kopieren Sie dazu sowohl Ihren benutzerdefinierten Dienst als auch die Timer-Datei in das Dienstverzeichnis Ihres Systemd:
Laden Sie die aktuelle Konfiguration des Init-Daemons neu:
Aktivieren Sie sowohl den Dienst als auch den Timer, die Sie erstellt haben, mit systemctl
:
Überprüfen Sie, ob Sie Ihren neuen Timer richtig geladen haben, indem Sie Folgendes sudo systemctl status my-new-timer.timer
in einer neuen Terminalsitzung ausführen: In diesem Fall können Sie sehen, dass mein Timer jetzt geplant und für die Ausführung im System 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 internen Vorgänge dieses wunderbaren Betriebssystems ein, indem Sie unseren Vergleichsartikel zu Grub und Systemd-Boot lesen.
Bildnachweis: Alexandr Podvalny via Unsplash . Alle Änderungen und Screenshots von Ramces Red.
Schreibe einen Kommentar