Noch einmal Filesystem-Überwachung: incron

Veröffentlicht am

Erst vor kurzem habe ich eine kleine Einführung in das Thema rund um inotify und iwatch hier gepostet. Nun möchte ich ein weiteres Tool, ähnlich wie iwatch, vorstellen: incron

incron-logoUnterschiede zu iwatch

Die Idee bei incron ist, wie auch schon der Name verrät, eine Art Crontab zu bieten, die aber nicht auf Zeitangaben sondern auf Events des Filesystems basiert. Daher sieht auch die Konfigurationsdatei vom Aufbau her ähnlich wie eine Crontable aus. So kann auch jeder Benutzer seine eigene Konfiguration hinterlegen.

Ein funktionaler Unterschied – zwar klein, aber unter Umständen entscheidend – ist, dass man (derzeit) bei iwatch im aufzurufenden Kommando nicht den ausgelösten Event übergeben kann. So kann man im aufgerufenen Skript keine Fallunterscheidung verbauen. Bei incron kann man dagegen das Event numerisch oder textuell angeben.

Außerdem ist iwatch standardmäßig darauf ausgelegt, Mails zur Benachrichtung zu verschicken und das Syslog zu befüllen, während incron die Verarbeitung der Events wirklich komplett dem User überlässt. Mailversand und Logging müssen hier also selbst vorgenommen werden.

Installation

Auch incron kann in Ubuntu ganz einfach aus den Standard-Paketquellen (Sektion universe) installiert werden:

sudo apt-get install incron

Danach kann der dienst wie gewohnt mit

/etc/init.d/incrond start

gestartet und mit

/etc/init.d/incrond stop

gestoppt werden.

Konfiguration

Zunächst einmal müssen die Benutzer festgelegt werden, die incron benutzen dürfen – auch root darf erst einmal nicht! Dazu müssen alle Benutzernamen in der Datei /etc/incron.allow angegeben werden.

Außerdem existiert eine Konfigurationsdatei namens /etc/incron.conf, in der einige Dinge angepasst werden können. Aber das ist i.d.R. nicht notwendig.

Tabellen anlegen

Nun kann man eine incron-Tabelle anlegen, indem man incrontab -e aufruft. Wie zum Editieren von Crontabs öffnet sich darauf hin standardmäßig der vi-Editor. Möchte man einen abweichenden Benutzer angeben, benutzt man zudem noch das Argument -u andereruser.

Das Schema, nach dem die Tabellen aufgebaut sein müssen sieht so aus: <Pfad> <Maske> <Kommando>. Also beispielsweise so wie folgt, um bei neuen Dateien, Änderungen und Löschungen im Verzeichnis /tmp/test das Shellskript /tmp/foo.sh unter Angabe der Datei und dem ausgelösten Event aufzurufen:

/tmp/test IN_CLOSE_WRITE,IN_DELETE /tmp/foo.sh $@/$# $%

IN_CLOSE_WRITE und IN_DELETE sind die Events, auf die reagiert werden soll. Welche Events abgegriffen werden können, sagt uns die inotify-Manpage. Die Variablen, die hinten angehängt sind, entsprechen dem Pfad ($@), der Datei ($#) und dem Event in Textform ($%). Auskunft zu weiteren Variablen gibt die incron-Dokumentation.

Abschließend muss die Tabelle neu geladen werden, damit die Änderungen greifen. Das passiert mit:

incrontab -d

Hinweis auf Upstart

Zu meinem vorigen Artikel (zu iwatch) hat sich „dakira“ per Kommentar zu Wort gemeldet und mich darauf hingewiesen, dass mittlerweile auch Upstart die Möglichkeit vorsieht, Filesystem-Überwachungen per inotify zu konfigurieren. Der eigentliche Hintergrund dort ist, dass geänderte Konfigurationsdateien darüber automatisch neu geladen werden können.

Vielleicht werde ich ja aber auch mal noch einen Artikel zur Upstart-Variante schreiben…

Fazit

Die beiden Tools incron und iwatch sind sich (natürlich) sehr ähnlich. Trotzdem gibt es feine Unterschiede, die je nach Anwendungsgebiet doch ins Gewicht fallen können. Ich hoffe die Einsatzmöglichkeiten wurden klar.

Falls ihr Anregungen – oder was auch immer – habt, schreibt mir und den anderen Lesern doch bitte ein Kommentar… :)


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

5 Kommentare zu Noch einmal Filesystem-Überwachung: incron

  1. Kommentar von D630
    10. Mai 2013, 12:57 Uhr.

    Hi, vielen Dank für deinen Überblick.

    Ich hatte mir iwatch und incron auch mal angesehen, um es hinzubekommen, meine org-files ereignisbasiert in mein lokales git-repo zu auto-commiten. Habe mich dann aber entschieden, dafür inotifywait aus den inotify-tools zu benutzen. Ich benutze inotify also, um automatisch History und Backup meiner normalen Textdateien zu machen. Ein anderer Weg ist mir bisher nicht in den Sinn bekommen

  2. Kommentar von dAnjou
    10. Mai 2013, 15:29 Uhr.

    Sehr schöner Artikel. Sowas will ich öfter im UU-Planeten sehen!

    • Kommentar von Gerald
      12. Mai 2013, 09:23 Uhr.

      Huch, vielen Dank für die Blumen… :) Und auch an den vorigen Kommentator D630 vielen Dank!

  3. Kommentar von Das Wort
    14. Mai 2013, 05:25 Uhr.

    Kann man bei incron auch die Parameter an einen Befehl übergeben?

    Also dass man $@ an ein Shellskript übergeben kann dass die Variable weiter nutzt.

    • Kommentar von Gerald
      14. Mai 2013, 08:17 Uhr.

      Ja, das zeigt doch das Beispiel mit foo.sh. Oder meinst du das irgendwie anders?

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>