systemd-Timer für wiederkehrende Aufgaben konfigurieren
In diesem Schritt lernen Sie systemd
-Timer kennen, eine moderne Alternative zu cron
für die Planung von Aufgaben auf Linux-Systemen. systemd
-Timer bieten mehr Flexibilität und eine bessere Integration in das systemd
-Ökosystem. Während systemctl
-Befehle typischerweise zur Verwaltung von systemd
-Units verwendet werden, konzentrieren wir uns aufgrund der Docker-Containerumgebung auf das direkte Erstellen und Überprüfen der Timer- und Service-Unit-Dateien.
systemd
-Timer arbeiten in Verbindung mit systemd
-Service-Units. Eine Timer-Unit (.timer
-Datei) definiert, wann eine Aufgabe ausgeführt werden soll, und eine Service-Unit (.service
-Datei) definiert, welche Aufgabe ausgeführt werden soll.
Wir werden weiterhin auf dem lokalen System arbeiten, um die Konfiguration von systemd-Timern zu erkunden.
Sie benötigen Root-Rechte, um systemd
-Unit-Dateien in Systemverzeichnissen zu erstellen. Da der LabEx-Benutzer sudo-Zugriff hat, können wir sudo
für die erforderlichen Befehle verwenden.
Lassen Sie uns einen einfachen Service erstellen, der eine Nachricht in eine Datei protokolliert. Wir werden diese Service-Unit-Datei in /etc/systemd/system/
platzieren, wo benutzerdefinierte Service-Units typischerweise gespeichert werden.
Erstellen Sie die Service-Unit-Datei /etc/systemd/system/my-custom-task.service
:
sudo nano /etc/systemd/system/my-custom-task.service
Fügen Sie den folgenden Inhalt zur Datei hinzu:
[Unit]
Description=My Custom Scheduled Task
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo "My custom task executed at $(date)" >> /var/log/my-custom-task.log'
Speichern und beenden Sie den Editor (Ctrl+o
, Enter
, Ctrl+x
in nano
).
Erstellen Sie als Nächstes die Timer-Unit-Datei /etc/systemd/system/my-custom-task.timer
. Dieser Timer aktiviert unseren Service alle 5 Minuten.
sudo nano /etc/systemd/system/my-custom-task.timer
Fügen Sie den folgenden Inhalt zur Datei hinzu:
[Unit]
Description=Run My Custom Scheduled Task every 5 minutes
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.target
Speichern und beenden Sie den Editor.
Erläuterung von OnCalendar
:
*:0/5
bedeutet "alle 5 Minuten".
*
für Jahr, Monat, Tag, Stunde (beliebiger Wert).
0/5
für Minute, d. h. beginnend bei Minute 0, alle 5 Minuten (0, 5, 10, ..., 55).
In einer typischen systemd
-Umgebung würden Sie jetzt systemctl daemon-reload
ausführen, um systemd
über die neuen Unit-Dateien zu informieren, und dann systemctl enable --now my-custom-task.timer
, um den Timer zu starten. Aufgrund von Docker-Container-Einschränkungen ist systemctl
jedoch nicht voll funktionsfähig.
Stattdessen werden wir die Erstellung der Dateien manuell überprüfen. Der systemd
-Daemon im Container könnte diese Dateien irgendwann abrufen, aber wir können seine Timerausführung in diesem Lab-Setup nicht direkt steuern oder beobachten. Das Hauptziel hier ist es, zu verstehen, wie man diese Dateien konfiguriert.
Überprüfen wir die Existenz der erstellten Dateien:
ls -l /etc/systemd/system/my-custom-task.service
ls -l /etc/systemd/system/my-custom-task.timer
Sie sollten eine Ausgabe sehen, die anzeigt, dass beide Dateien existieren.
Um die Ausführung des Service zu simulieren, können Sie den in ExecStart
definierten Befehl manuell ausführen:
sudo /bin/bash -c 'echo "My custom task executed at $(date)" >> /var/log/my-custom-task.log'
Überprüfen Sie nun die Protokolldatei, um die Ausgabe zu sehen:
sudo cat /var/log/my-custom-task.log
Sie sollten die soeben protokollierte Nachricht sehen:
My custom task executed at Tue Jun 10 06:54:40 UTC 2025
Dies schließt den Schritt der systemd-Timer-Konfiguration ab. Die Service- und Timer-Unit-Dateien verbleiben zur Referenz an ihrem Platz.