Systemd Path Units zum Überwachen von Dateien und Verzeichnissen verwenden
Dieses Tutorial zeigt die Verwendung von Systemd Path Units. Sie ermöglichen es, im Falle von Änderungen an Dateien und Verzeichnissen eine Aktion auszulösen.
In einem vorangegangenen Artikel haben wir Systemd Timer Units vorgestellt, um Jobs auszuführen, und ihre Vor- und Nachteile gegenüber crond erörtert. In diesem Artikel widmen wir uns einer anderen Art von Unit-Dateien, den Path Units. Systemd Path Units ermöglichen es, Dateien und Verzeichnisse (Pfade) auf Ereignisse zu überwachen. Sobald ein Ereignis eintritt, kann Systemd ein Skript über eine Service Unit ausführen. Wir werden nun eine Beispielkonfiguration erzeugen.
Erstellen einer Systemd Path Unit
In diesem Beispiel erstellen wir eine Path Unit, um eine E-Mail-Benachrichtigung zu senden, wenn sich die Datei /etc/passwd auf unserem System ändert. Um eine funktionale Path Unit zu erstellen, benötigen wir drei Dateien.
- Ein Skript, das den E-Mail-Alarm sendet
- Die Service Unit, um das Skript zu starten, wenn ein Ereignis eintritt
- Die Path Unit, um die Datei oder das Verzeichnis zu beobachten
Erstellen eines Skripts für E-Mail-Alarme
Wir erstellen nun ein einfaches Skript, das einen E-Mail-Alarm an unsere Administratoren sendet. Dazu legen wir die Datei /usr/local/bin/email-alert.sh mit dem folgenden Inhalt an.
#!/bin/bash mail -S sendwait -s "ETC PASSWD CHANGED ON $(hostname)" myadmin@example.com < /etc/passwd
Anmerkung: Das setzt voraus, dass das System korrekt konfiguriert ist, um E-Mail zu senden, und dass mailx installiert ist.
Das Skript machen wir mit dem Kommando chmod
ausführbar:
$ chmod +x email-alert.sh
Erstellen der Service Unit-Datei, die das Skript ausführt
Die Service Unit ist verantwortlich für die Ausführung des Skripts, wenn die Path Unit Änderungen an der Datei beobachtet. In diesem Beispiel verwenden wir beim Erstellen der Service Unit der Einfachheit halber nur die grundlegendsten Deklarationen.
Wir legen eine Datei /etc/systemd/system/passwd-mon.service mit dem folgenden Inhalt an:
[Unit] Description="Run script to send email alert" [Service] ExecStart=/usr/local/bin/email-alert.sh
Es gibt zahlreiche weitere Optionen für eine Service Unit, die aber außerhalb des Gegenstands dieses Tutorials liegen.