Filesystem-Änderungen überwachen mit iwatch (und inotify)

Veröffentlicht am

Mit iwatch bzw. der inotify-Schnittstelle kann auf einfache Art und Weise das Filesystem auf Änderungen überwacht und so zahlreiche Aufgabenstellungen realisiert werden. Eine kleine Einführung…

iwatch-logoWozu eine Filesystem-Überwachung?

Man mag sich zunächst fragen, wozu eine Überwachung des Filesystems überhaupt gut sein soll. Je länger man nachdenkt desto mehr Anwendungsbeispiele fallen einem allerdings ein…

  • Überwachung kritischer Dateien auf einem Server (um z.B. Hacks mitzubekommen)
  • Fortschreibung jeder Änderungsversion von Dateien (um alte Versionen wiederherstellen zu können)
  • automatisches Backup von Dateien bei Änderung
  • automatische Verarbeitung neuer Dateien in einem Verzeichnis
  • Erstellung von Zugriffsstatistiken

Außer für die reine Überwachung und Benachrichtigung per Mail, muss bei Verwendung von iwatch allerdings für diese Anwendungsbeispiele selbst ein Shellskript gebastelt werden. iwatch benachrichtigt nur über die Änderungen im Dateisystem.

Unterscheidung inotify / iwatch

inotify ist ein Subsystem des Kernels samt dazugehöriger API und für den Anwender für sich alleine unbrauchbar. Entwickler können relativ einfach selbst überwachende Anwendungen schreiben – die Manpage und die englisch-sprachige Wikipedia-Seite geben interessante Details dazu.

Auf der API von inotify aufbauend gibt es dann Anwendungen wie eben iwatch, die dem normalen User die Funktionalitäten zur Verfügung stellen.

Installation

Während inotify bereits über den Kernel verfügbar ist, muss iwatch nachinstalliert werden. Das kann aber ganz einfach über das gleichnamige Paket in den Standard-Paketquellen (Sektion universe) geschehen:

sudo apt-get install iwatch

Direktaufruf aus der Shell

Um erst einmal die Funktionsweise zu zeigen, rufen wir iwatch nun zunächst direkt von der Shell aus auf.

Beispielsweise wollen wir jedes Mal, wenn eine neue Datei im Verzeichnis /home/ich/foo erzeugt wird, ein Shellskript namens /pfad/zu/foo.sh ausführen, um etwas mit der angelegten Datei anzustellen. Der Aufruf sieht dann so aus:

iwatch -c "/pfad/zu/foo.sh %f" -e close_write /home/ich/foo

Dabei wird beim Aufruf des Shellskripts %f durch den komplette Pfad der angelegten Datei ersetzt. Als Event habe ich close_write gewählt, weil im Gegensatz zu create die Datei nicht nur erzeugt sondern in vollem Umfang geschrieben wurde.

Möchte man sich über Änderungen lediglich per Mail informieren lassen, gibt man anstatt mit -c das Kommando mit -m die Empfänger-Mailadresse an.

iwatch -m ich@foo.de -e close_write /home/ich/foo

Das funktioniert allerdings nur, wenn auf dem Rechner auch ein Mailserver läuft.

Es gibt natürlich noch viele Varianten mehr. Auf der Projektseite findet ihr eine komplette Dokumentation (allerdings nur in englischer Sprache). Besonders interessant sind natürlich die Events, auf die reagiert werden kann.

Einsatz als Daemon

Es besteht natürlich aber auch die Möglichkeit, iwatch als Daemon laufen zu lassen. Dazu ist zunächst einmal eine kleine Änderung in der Datei /etc/default/iwatch notwendig. Hier findet sich die folgende Zeile:

START_DAEMON=false

Hier muss, wer hätte das gedacht :), false durch true ersetzt werden. Das sorgt dann dafür, dass der Daemon beim Bootvorgang automatisch gestartet wird. Um den Daemon einmalig zu starten, gibt man ein:

/etc/init.d/iwatch start

Nun noch ein Blick auf die Konfigurationsdatei namens /etc/iwatch/iwatch.xml (sofern in /etc/default/iwatch nicht abgeändert). Den vollen Umfang der Einstellungsmöglichkeiten hier zu erläutern wäre wohl Quatsch. Stattdessen möchte ich hier nur ein paar Hinweise geben und euch noch einmal an die Dokumentation verweisen…

  • das Element config darf nur einmal vorkommen, guard-Elemente kann es dagegen beliebig viele geben
  • innerhalb des watchlist-Elementes werden mit Hilfe von path-Elementen die Verzeichnisse und Dateien angegeben, die von dem jeweiligen „Guard“ überwacht werden sollen
  • jedes path-Element hat ein type-Attribut. Der Typ single gibt ein einzelnes Ziel an, mit recursive werden auch Unterverzeichnisse überwacht. Mit exception können Ziele ausgeschlossen werden. Daneben gibt es noch regexception zum Ausschluss per Regular Expression (also nach Mustern).

Ich denke, die Basis-Konfiguration dürfte auch schon recht klar verständlich sein:

<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "/etc/iwatch/iwatch.dtd" >

<config>
  <guard email="root@localhost" name="IWatch"/>
  <watchlist>
    <title>Operating System</title>
    <contactpoint email="root@localhost" name="Administrator"/>
    <path type="single" syslog="on">/bin</path>
    <path type="single" syslog="on">/sbin</path>
    <path type="single">/etc</path>
    <path type="recursive">/lib</path>
    <path type="exception">/lib/modules</path>
  </watchlist>
</config>

Nach einer Änderung in der Konfigurationsdatei muss der Dienst neu gestartet werden, mit:

/etc/init.d/iwatch restart

inotify in Shellskripts

Für die Verwendung der inotify-Funktionalität in Shellskripts gibt es die beiden Tools inotifywait und inotifywatch, die über das Paket inotify-tools installiert werden können. Eine umfangreiche Beschreibung dazu findet ihr auf der entsprechenden Wiki-Seite von ubuntuusers.de.

Fazit

Ich denke und hoffe, es ist in etwa klar geworden, was man mit iwatch anstellen kann. Mit etwas Phantasie kann man da wohl recht nette Dinger bauen. Falls ihr Anregungen – für mich und für die übrigen Leser – habt, schreibt mir doch einen Kommentar. Natürlich auch dann, wenn ihr noch eine wichtige Information vermisst… oder so…


Dieser Artikel wurde in der/den Kategorie(n) OSBN, Planet-U, Praxis, Programmierung und Skripting veröffentlicht und mit den Tags , , , versehen.

3 Kommentare zu Filesystem-Änderungen überwachen mit iwatch (und inotify)

  1. Kommentar von dakira
    22. April 2013, 14:24 Uhr.

    Kleiner Tip: In der aktuellsten Version kann das auch Upstart. man kann also mit Ubuntu-Bordmitteln Dateisystemänderungen (auch rekursiv über ganze vErzeichnisse) überwachen).

    • Kommentar von Gerald
      23. April 2013, 09:08 Uhr.

      Ok, danke für den Hinweis! Die Nachricht ging an mir vorüber. In sofern ist der iwatch-Daemon wohl hinfällig. Mir fällt zumindest nicht ein, wo ein Unterschied liegen könnte – zumal beides auf inotify aufbaut.
      Bleibt bei iwatch die zusätzliche Möglichkeit, Beobachtungen von der Shell aus interaktiv oder per Skript zu starten.
      Gruß, Gerald

  2. Pingback: Noch einmal Filesystem-Überwachung: incron | ME and my U

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>