[[Vorlage(Getestet, jammy)]] 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 [:systemd/Service Units: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 [#Direktiven 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 [:systemd/Units/#Selbst-angelegte-Units-aktivieren: aktiviert] werden, damit sie beim nächsten Systemstart automatisch gestartet wird. Zur Überwachung von Dateien und Verzeichnissen nutzt systemd im Hintergrund das [wikipedia_en:Inotify:] Subsystems des Linux-Kernels. = Direktiven = In der Sektion `Path` können fünf verschiedenen Direktiven, welche unterschiedliche Überwachungen aktivieren, angegeben werden: {{{#!vorlage Tabelle <-2 rowclass="titel">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: {{{#!vorlage Tabelle <-2 rowclass="titel">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 = * [https://www.freedesktop.org/software/systemd/man/systemd.path.html Dokumentation] {en} zu systemd Path Units #tag:System, systemd, Dateisystem