ubuntuusers.de

Path Units

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


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.

Diese Revision wurde am 4. Juni 2023 12:56 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: systemd, Dateisystem, System