Systemd-Timer

Im Linux-Betriebssystem ist systemd ein Dienstmanager und ein Systemmanager. Es fungiert als Init-System, wenn es als erster Prozess beim Booten ausgeführt wird. Es speichert und verfolgt die Userspace-Dienste. Um die Dienste angemeldeter Benutzer zu starten, wird mit separaten Instanzen begonnen. Timer sind Unit-Dateien von systemd mit der Erweiterung „.timer“. Diese Dateien steuern die „.service“-Dateien oder Ereignisse in einem System.

Meistens werden Timer als Ersatz für CRON verwendet. Es bietet uns integrierte Unterstützung für Kalenderzeitereignisse. Der Vorteil von Timern gegenüber Cronjobs besteht darin, dass sie eine detailliertere Steuerung von Ereignissen ermöglichen. Diese werden verwendet, wenn eine Aufgabe eine Planung auf einem Linux-Betriebssystem erfordert. Wenn wir beispielsweise beim Booten unserer Maschine einen Prozess starten möchten, verwenden wir zu diesem Zweck die Timer. Zuvor war cron das Werkzeug für diese Art von Aufgaben. Heutzutage werden für diese Zwecke jedoch Zeitschaltuhren verwendet.

Timer sind insofern fast wie Cron, als sie sowohl einen Ansatz als auch einen Mechanismus zum Planen von Aufgaben im Linux-Betriebssystem bieten. Cron hat seine Nachteile, weshalb es durch Timer ersetzt wird. Wenn wir zum Beispiel unser Backup um 17 Uhr abends planen wollen und unser System irgendwie zwischen 16:50 und 17:10 Uhr herunterfährt, überspringt cron in diesem Fall das Backup, was den Zweck der Planung zunichte macht.

Um mit Timern arbeiten zu können, benötigen wir folgende Voraussetzungen:

  • Root-Rechte
  • Terminal

Die Funktionen der Systemd-Timer benötigen zwei Konfigurationsdateien:

Timer-Einheit: Die Timer-Einheit verfolgt, wann die Servicedateien verwendet werden sollen. Sie verwenden die Erweiterung „.timer“.

Serviceeinheit: Dies sind Gerätekonfigurationsdateien. Sie verwalten und definieren die Systemprozesse. Sie haben die Erweiterung „.service“, wie bereits erwähnt.

Jetzt besprechen wir, wie wir eine automatisierte Serversicherung planen können. Ein weiterer Vorteil des systemd-Dienstes besteht darin, dass er nicht zulässt, dass Ihre Aufgaben mehrere Instanzen haben. Wenn wir eine Aufgabe irgendwie noch einmal starten, während sie bereits gestartet ist, überspringt sie den Startpunkt und hält ihn, bis die aktuell laufende Aufgabe ihre Aufgabe abgeschlossen hat. Nachdem wir unseren systemd-Dienst konfiguriert und geplant haben, erstellen wir eine Datei mit demselben Namen wie unser Dienst.

Der einzige Unterschied besteht darin, dass es die Erweiterung „.timer“ und nicht „service“ hat. Wir haben zum Beispiel einen Dienst namens „xyz“. In diesem Fall haben wir „xyz.service“ als unseren Dienstnamen und „xyz.timer“ als unseren Timer-Namen. Beachten Sie außerdem, dass sich beide Dateien im selben Verzeichnis befinden müssen.

Schritte zum Erstellen eines Systemd-Timers

Erstellen Sie ein Testskript

Dies ist ein einfaches Bash-Skript als Beispiel:

linux@linux-VirtualBox:~$ nano test.sh

Das vorherige Skript gibt das Datum aus.

Erstellen Sie eine Servicedatei

Jetzt erstellen wir eine Dienstdatei oder -einheit, um das Bash-Skript auszuführen.

linux@linux-VirtualBox:~$ nano /etc/systemd/system/new.service

Dies ist ein Beispielskript zum Erstellen der Servicedatei. Es gibt zwei Optionen: eine ist „Einheit“ und die andere ist „Service“. In diesem Schritt teilen wir dem System zunächst den Namen der Einheit und die Funktion dieser Einheit mit. Dann definieren wir einen Dienst mit dem Typ „einfach“. Abschließend definieren wir, dass der Dienst im Fehlerfall startet.

Erstellen Sie eine Timer-Datei

Nachdem wir die Servicedatei erstellt haben, erstellen wir nun eine Timerdatei. Wir führen den folgenden Befehl aus, um eine Timer-Datei zu erstellen:

linux@linux-VirtualBox:~$ nano /etc/systemd/system/test.timer

Es gibt drei Optionen: „Einheit“, „Timer“ und „Installieren“. Auch hier definieren wir nach der Ausführung des Befehls, was unsere Einheit tut. Es verfügt über eine „Timer“-Option. Mit dessen Hilfe teilen wir dem System mit, wann unser Skript ausgeführt wird. Die letzte Option „Installieren“ gibt an, wann unser Dienst entsprechend den Ausführungsebenen startet. Diese Option ist nur aktiviert, wenn ein Dienst mit Hilfe von systemctl aktiviert wird.

Lassen Sie uns nun die Optionen genauer besprechen, um Timer besser in den Griff zu bekommen.

Einheit: Dies gibt das Gerät an, das wir einschalten möchten, wenn der Timer abgelaufen ist. Der übergebene Parameter ist der Name einer Einheit, deren Erweiterung nicht „.timer“ sein darf. Wenn wir dazu nicht in der Lage sind oder den Einheitennamen nicht übergeben möchten, ist der Standardwert der Dienst, der in diesem Fall denselben Namen wie der Name des „.timer“ hat. Wie bereits besprochen, besteht der beste Ansatz darin, den Namen des Dienstes und den Namen des Timers gleich zu belassen.

Timer: Die Timer-Option enthält alle Informationen über den definierten Timer. In der Timer-Option finden wir alle Einstellungen, die wir zum Auslösen des Timers benötigen. Die Timer-Abschnitte bieten viele Optionen, wie zum Beispiel:

OnActiveSec=, OnBootSec=, OnStartupSec=, OnUnitActiveSec=, OnUnitInactiveSec=

Im Timer-Bereich teilen wir dem System außerdem mit, wann der Prozess ausgeführt und wann dieser Prozess entsprechend der Serverzeitzone beendet werden soll.

Der Timer-Bereich verfügt außerdem über eine sehr nützliche und wichtige Option:

Oncalender = Sets

Diese Option definiert, wie oft eine Aufgabe ausgeführt wird. Wenn wir beispielsweise eine Aufgabe täglich planen möchten, verwenden wir diese Option wie „OnCalendar=täglich“. Dieser erledigt die Aufgabe täglich.

Wenn Sie genauer sein möchten, können Sie entsprechend Ihren Anforderungen auch eine bestimmte DateTime übergeben. Bei der Arbeit mit Timern ist außerdem zu beachten, dass die täglichen Auslöser immer um Mitternacht erfolgen, was in Computersystemen eine Spitzenzeit ist. Um die Probleme dabei zu vermeiden, empfehlen wir Ihnen, „RandomizeDelaySec=“ zu verwenden. Es verzögert den Zeitplan zufällig mit einer Differenz von einigen Sekunden. Es ist ein Wert erforderlich, der die Sekunden angibt, die der Timer verzögert werden kann.

Das Problem ist, dass Daily immer um 12 Uhr ausgelöst wird. Wöchentlich wird immer am Montag um Mitternacht ausgelöst. Und „Jährlich“ wird immer am ersten Januar ausgelöst. Dies alles sind Spitzenzeiten, in denen es überall zu Netzwerkausfällen kommt.

Aktivieren und starten Sie den Timer

Dies ist der letzte Schritt unserer Aufgabe. Diesen Schritt führen wir systematisch durch. Um diese Aktivität auszuführen, müssen wir einen „Daemon-Reload“ durchführen. Um zu sehen, ob eine neue Datei erstellt oder eine alte Datei aktualisiert wird, wird das gesamte System neu geladen.

Fehlerbehebung

Manchmal gelingt es uns nicht, alle Probleme im Voraus zu erkennen. Im systemd-Timer können wir sicherstellen, dass sie abgefangen werden, indem wir die „systemd“-Timereinheiten überprüfen, bevor wir sie aktivieren. Dazu verwenden wir den Befehl „systemd-analyze-verify“. Dieser Befehl hilft uns, ein potenzielles Problem herauszufinden und es entsprechend zu beheben.
Es gibt auch andere Befehle, die uns bei der Fehlerbehebung und Diagnose unserer Timer helfen. Es gibt beispielsweise einen Befehl, der uns hilft zu überprüfen, ob unser Dienst erfolgreich ausgeführt wird oder nicht. Der Befehl lautet wie folgt:

linux@linux-VirtualBox:~$ sudo journalctl -S today -f -u test.service

Dieser Befehl zeigt uns, wann der Dienst zuletzt gestartet wurde, und das Ergebnis unseres Bash-Befehls, wie im folgenden Snippet dargestellt:

Abschluss

Wir haben den Systemtimer untersucht. Nachdem wir einen detaillierten Überblick darüber erhalten haben, was ein System-Timer ist und wie er funktioniert, haben wir ein Beispiel implementiert, um Ihnen die Idee kürzer zu erläutern, in dem wir jeden Schritt in mehreren Teilen erklärt haben.

Kommentar verfassen

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

Nach oben scrollen