ubuntuusers.de

Path Units

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

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.

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
Unit=NAME_DER_UNIT Es wird die Service-Unit NAME_DER_UNIT.service ausgeführt. 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.
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.

Diese Revision wurde am 20. Juni 2019 13:55 von Tronde erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Dateisystem, systemd