Path Units
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Mit Hilfe von systemd Path-Units können Dateien oder Verzeichnisse auf Änderungen hin überwacht werden. Tritt ein definiertes Ergebnis wie z.B. das Anlegen einer Datei ein, wird eine Service-Unit ausgeführt.
Eine minimale Path-Unit sieht z.B. wie folgt aus:
[Unit] # Abschnitt wird im Artikel systemd/Units beschrieben [Path] PathExists=/home/BENUTZER/Verzeichnis/ Unit=NAME_DER_SERVICE_UNIT.service [Install] # Abschnitt wird im Artikel systemd/Units beschrieben
Obligatorisch für Path-Units ist die Sektion Path
. Darin muss eine Direktive wie im Beispiel PathExists=
stehen, gefolgt vom einem absoluten Pfad, der überwacht werden soll.
Unter Unit=
wird angegeben, welche Service-Units ausgeführt werden soll. Wird diese Direktive nicht angegeben, wird automatisch nach einer Service-Unit geschaut, die den gleichen Namen wie die Path-Unit hat. Heißt die Path-Unit z.B. ueberwachung.path, dann würde versucht, die Service-Unit ueberwachung.service auszuführen.
Nach dem Anlegen einer neuen Path-Unit muss diese aktiviert werden, damit sie beim nächsten Systemstart automatisch gestartet wird.
Zur Überwachung von Dateien und Verzeichnissen nutzt systemd im Hintergrund das Inotify Subsystems des Linux-Kernels.
Direktiven¶
In der Sektion Path
können fünf verschiedenen Direktiven, welche unterschiedliche Überwachungen aktivieren, angegeben werden:
Direktiven für die Path-Sektion | |
Direktive | Erklärung |
PathExists=NAME_DATEI_ODER_VERZEICHNIS | Überwacht das Verzeichnis auf die Existenz einer Datei oder eines Verzeichnisses. Diese müssen nur existieren, ob sie leer sind oder Inhalt haben spielt keine Rolle. |
PathExistsGlob=MUSTER_FÜR_DATEI_ODER_VERZEICHNIS | Wie PathExists , allerdings kann ein Muster angegeben werden, auf das überwacht wird. So würde *.txt auf Dateien mit der Endung "txt" überwachen oder ab* auf alle Dateien oder Verzeichnisse, die mit "ab" beginnen. |
PathChanged=NAME_DATEI_ODER_VERZEICHNIS | Überwacht Dateien auf Änderung, führt die auszuführende Service-Units aber erst aus, wenn die überwachte Datei wieder geschlossen wird. |
PathModified=NAME_DATEI_ODER_VERZEICHNIS | Wie PathChanged , führt die auszuführende Service-Units aber bereits aus, wenn der Inhalt der Datei geändert wurde, ohne das diese geschlossen wurde. |
DirectoryNotEmpty=NAME_DES_VERZEICHNISSES | Überwacht ein Verzeichnis und führt die auszuführende Service-Unit aus, sobald im Verzeichnis eine Datei angelegt wird. |
Die Direktiven PathExists, PathExistsGlob, PathChanged und PathModified machen grundsätzlich keinen Unterschied zwischen Dateien und Verzeichnissen. D.h. eine Direktive
PathExists=/home/BENUTZER/foo
würde die auszuführende Service-Unit ausführen, wenn im Verzeichnis /home/BENUTZER eine Datei oder ein Verzeichnis namens foo angelegt würde.
Nutzt man eine Direktive wie
PathExistsGlob=/home/BENUTZER/verzeichnisname/*txt
und im Verzeichnis /home/BENUTZER/verzeichnisname/ existiert schon z.B. die Datei foo.txt, wenn noch eine weitere Datei bar.txt angelegt wird, dann wird die auszuführende Service-Units zweimal ausgeführt, also für jede passende Datei ein Mal.
weitere Direktiven¶
In der Path-Sektion können außerdem noch die folgenden Direktiven angegeben werden:
weitere Direktiven für die Path-Sektion | |
Direktive | Erklärung |
MakeDirectory= | Als Argumente sind true oder false erlaubt, false ist die Voreinstellung. Mit dieser Direktive wird festgelegt, ob das zu überwachende Verzeichnis angelegt werden soll, falls dieses nicht existiert. |
DirectoryMode=MODUS | Ist MakeDirectory=true gesetzt, können mit der Direktive DirectoryMode= Rechte festgelegt werden. MODUS muss in der oktalen Notation angeben werden, die Voreinstellung ist 755 . |
TriggerLimitIntervalSec= , TriggerLimitBurst= | Mit diesen beiden Direktiven wird festgelegt, wie oft die Path-Unit in welcher Zeitspanne ausgelöst werden kann. Die Voreinstellungen sind 200 Mal in 2 Sekunden. Wird das Limit überschritten, wird die Unit in den Fehlermodus versetzt und deaktiviert, bis sie manuell neu gestartet wird. Will man keine Limits haben, setzt man einen der beiden Werte auf 0. |
Links¶
Dokumentation 🇬🇧 zu systemd Path Units