14 November 2013

Inotify-Events in der Shell mit inotifywait überwachen und nutzen

Das Kernel-Subsystem Inotify überwacht das Dateisystem und berichtet alle „Events“ genannten Aktionen auf dem Dateisystem wie Zugriffe, Änderungen, Löschungen, neue Dateien und ähnliches an den Userspace. Dies ist vor allen Dingen nützlich für Desktop-Suchprogramme, einige Arten von Virenscannern und jede andere Form von Programm das instantan reagieren muss, sobald sich entsprechende Dateien geändert haben.

Für die Shell besteht die Möglichkeit, mit Hilfe der inotify-tools Inotify zu integrieren. Dafür stehen zwei Programme zur Verfügung: inotifywatch sammelt mehrheitlich statistische Daten und eignet sich für das Reporting der Zahl von Änderungen in einem gegebenen Datenbestand. inotifywatch hingegen kann beliebige Dateien und Verzeichnisse (auch rekursiv) überwachen, dabei verschiedene Typen von Events unterscheiden und auf diesen beruhend andere Programme oder Aktionen aufrufen. Der alltägliche Umgang mit dem Skript wird durch optionale Schalter für das Formatieren der Ausgabe, das Ignorieren von spezifischen Dateien und Verzeichnissen und andere vereinfacht.

Als Beispiel soll im folgenden ein Verzeichnis mit einem LaTeX-Dokument überwacht werden. Der Admin muss kontinuierlich viele kleine Änderungen darin vornehmen, zwischendurch immer wieder die PDF dazu prüfen, und will nicht jedes Mal den notwendigen „make“-Befehl von Hand ausführen. Dabei ist zu beachten, dass es lediglich um den Event-Typus Änderung, also „modify“ geht, und dass die Änderungen in Vim stattfinden, entsprechende temporäre Dateien müssen also ignoriert werden:

 

$ while true; do inotifywait -r -e modify --exclude=".swp" . && make; done
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
./mainmatter/ MODIFY File15.tex
latexmk -pdf -r ./pdflatexmkrc
Latexmk: This is Latexmk, John Collins, 11 Nov. 2012, version: 4.35.
**** Report bugs etc to John Collins . ****
Latexmk: applying rule 'pdflatex'...
Rule 'pdflatex': File changes, etc:
   Changed files, or newly in use since previous run(s):
      'mainmatter/File15.tex'
------------
Run number 1 of rule 'pdflatex'
------------

 

Inotify meldet korrekt eine Änderung in der Datei „File15.tex“ und ruft make auf. Die While-Schleife stellt sicher, dass nach einem Durchlauf das Programm weiter läuft und auf die nächste Änderung wartet.

 

Dieser Artikel wurde ursprünglich geschrieben von Roland Wolters.

Kategorien: HowTos
Tags: Kernel Linux

SH

über den Autor

Sascha Heuer


Beitrag teilen: