2190878

So überwachen Sie Linux-Dateisysteme mit dem Verzeichnisspion Incron

20.04.2016 | 12:17 Uhr |

Aufgaben automatisieren – diese Disziplin beherrscht Linux ausgezeichnet. Der Taskplaner Incron kann bestimmte Verzeichnisse überwachen, auf Änderungen im Dateisystem reagieren und dann vordefinierte Aktionen ausführen.

Ein leistungsfähiges Linux-System im Netzwerk ist nicht nur als Server für den Hausgebrauch ideal, sondern auch zur Automatisierung wiederkehrender Aufgaben. Und auch unter einem Linux-Desktop können die per Bash-Script programmierbaren Taskplaner Cron, Anacron und At viele Handgriffe bei periodischen Jobs sparen. Die üblichen Taskplaner sind alle zeitgesteuert und treten nach Intervallen (Cron), bestimmten Zeiten (At) in Aktion oder auch erst mit Verzögerung dann, wenn ein Desktopsystem nach einer Auszeit wieder läuft (Anacron).

Mit Incron, das ein Verwandter solcher Aufgabenplaner ist, kann ein Linux-System vordefinierte Aktionen bei Änderungen an einem überwachten Verzeichnis ausführen. Tritt auf Dateisystemen eine bestimmte Bedingung ein – indem etwa eine neue Datei oder ein Ordner hinzukommt –, dann bemerkt Incron dies und führt ein beliebiges Script aus. Für automatisierte Aufgaben im Dateisystem ist diese Lösung elegant, effizient und kaum komplizierter als die Einrichtung herkömmlicher Cronjobs.

Lese-Tipp: So beherrschen Sie den Linux-Autostart

Funktionsweise und Einrichtung vom Taskplaner Incron

Incron selbst ist ein Taskplaner, der nach dem „Wenn-dann“-Muster arbeitet und als Daemon (Hintergrunddienst) läuft. Die Überwachung des Dateisystems überlässt Incron der Kernel-Schnittstelle von Inotify. Der Linux-Kernel ist über Vorgänge in den eingehängten Dateisystemen sowieso informiert und bietet über Inotify eine API-Schnittstelle, um diese Änderungen abzufragen. Incron kann sich also auf den Kernel verlassen und bleibt deshalb so kompakt und genügsam, dass der laufende Daemon im Betrieb nicht auffällt. Die Überwachung von Verzeichnissen ist nicht rekursiv: Nur Änderungen auf der ersten Ebene werden bemerkt, nicht aber Änderungen in Unterordnern.

Die Installation von Incron ist unter den verbreiteten Distributionen Debian, Raspbian, Ubuntu, Mint, Fedora und anderen unproblematisch, da der Aufgabenplaner in den Standardpaketquellen liegt. In Debian/Ubuntu ist Incron beispielsweise über den Befehl

sudo apt-get install incron

im Handumdrehen installiert und beinahe einsatzbereit. Prinzipiell kann jeder Benutzer seine eigenen Incron-Aufgaben erstellen.

Unter Debian/Ubuntu müssen aber alle Benutzer, inklusive root, die Incron benutzen dürfen, erst noch in die Datei „/etc/incron.allow“ eingetragen werden. Dazu sind root-Rechte nötig und die Datei erwartet je einen Benutzernamen pro Zeile.

Benutzer freischalten: Erlaubte Benutzer müssen erst in „/etc/ incron.allow“ eingetragen werden.
Vergrößern Benutzer freischalten: Erlaubte Benutzer müssen erst in „/etc/ incron.allow“ eingetragen werden.

Eine Aufgabe im Verzeichnisspion Incron erstellen

Weil auch Linux-Administratoren Gewohnheitstiere sind und ungern allenthalben komplett Neues lernen wollen, sieht die Konfiguration von Incron dem gewohnten Cron recht ähnlich. Analog zum Editoraufruf crontab -e für Cronjobs gibt es hier mit

incrontab -e

ein Pendant, das eine Konfiguration der gewünschten Incron-Aktionen öffnet. Ein Eintrag für Incron ist hier nach dem Muster

[Pfad] [Ereignis] [Befehl]

aufgebaut, wobei „[Pfad]“ den Pfad zu einer Datei oder einem Ordner angibt, die beobachtet werden soll; „[Ereignis]“ ist ein Platzhalter für den Ereignistyp, der schließlich den „[Befehl]“ oder das angegebene Script ausführt. Als Ereignistypen sieht Incron eine ganze Reihe von Dateisystem-Events vor (siehe Tabelle „Ereignisse im Dateidateisystem“). Sie können auch mehrere Ereignisse angeben – per Kommata getrennt.

Ferner gibt es für den Befehlsteil noch Variablen, die beispielsweise den Namen einer Datei, die das Ereignis in einem überwachten Ordner ausgelöst hat, an ein Script weitergeben können. Diese Variablen werden durch ein Dollar-Zeichen eingeleitet und umfassen „$@“ für den Pfad, „$#“ für den Dateinamen und „#%“ für den Typ des auslösenden Ereignisses.

Erst testen: Incron protokolliert seine Aktionen im Syslog.
Vergrößern Erst testen: Incron protokolliert seine Aktionen im Syslog.

Ein Beispiel: Automatisches Backup

Was man damit konkret anstellen kann, soll ein einfaches Beispiel demonstrieren, das die Verwendung der Incron-Variablen und der Incrontab-Syntax zeigt. Hier soll ein simpler Task lediglich den Namen einer neu erstellten Datei als Benachrichtigung auf dem Desktop ausgeben. Erstellen Sie den neuen Ordner „input“ in Ihrem Home-Verzeichnis, öffnen Sie mit incrontab -e den Editor und geben Sie dort diese Zeile ein:

/home/[benutzer]/input IN_CREATE zenity --display=:0 --info --text $#

Den Pfad am Anfang passen Sie noch dem tatsächlichen Pfadnamen zum Ordner „input“ im Home-Verzeichnis an. Wann immer Sie jetzt eine Datei in diesen Ordner kopieren oder dort erstellen, wird ein Dialog auf dem Desktop den Dateinamen anzeigen. Nach diesem Schema lassen sich nahezu beliebige Dateiaktionen ausführen. Ein praktischeres Beispiel: Jede neue Datei im Verzeichnis „Input“ soll sofort in den zweiten Ordner „backup“ kopiert werden. Die Zeile in der Incrontab sieht dann so aus:

/home/benutzer/input IN_CREATE,IN_MOVED_TO cp $@/$# /home/benutzer/backup

Dies ist auch gleichzeitig ein Beispiel für die Angabe mehrerer Ereignistypen. Incron schreibt zur Kontrolle übrigens in das Syslog, das Sie in Debian/Ubuntu mit tail /var/log/syslog einsehen können.

Lese-Tipp: Timeshift - Backups von Systemdateien in Linux anlegen

Incron: Ereignisse im Dateidateisystem

Auf diese Ereignistypen in einem überwachten Verzeichnis oder bei einer einzelnen Datei kann Incron reagieren. Soll eine Aktion von verschiedenen Ereignissen ausgelöst werden, so ist in der Incrontab eine mehrfache, nur durch Kommata getrennte Angabe möglich.

Ereignis

Bedeutung

IN_ACCESS

Datei wurde geöffnet (Lesezugriff)

IN_ATTRIB

Dateiattribute wurden geändert (Rechte, Zeitstempel, usw.)

IN_CLOSE_WRITE

Datei wurde geändert und gespeichert

IN_CLOSE_NOWRITE

Datei wurde geändert, aber nicht gespeichert

IN_CREATE

Datei wurde neu erstellt

IN_DELETE

Datei wurde gelöscht

IN_DELETE_SELF

Verzeichnis wurde gelöscht

IN_MODIFY

Datei wurde geändert

IN_MOVE_SELF

Verzeichnis wurde verschoben

IN_MOVED_TO

Datei in das überwachte Verzeichnis verschoben

IN_MOVED_FROM

Datei wurde aus dem Verzeichnis verschoben

IN_OPEN

Ein Prozess hat die Datei geöffnet

Dateiänderungen: Endlosschleifen vermeiden

Wenn Incron in einem Verzeichnis nach Dateiänderungen Ausschau halten soll, dann kann es leicht geschehen, versehentlich einen Incron-Task zu erstellen, der nie fertig wird. Wird nach den Auslösern „IN_CREATE“, „IN_MODIFY“ oder anderen Ereignistypen beispielsweise eine Datei umbenannt oder konvertiert, dann befände sich Incron in einer Endlosschleife, da es bei jeder Dateiänderung abermals die vordefinierte Aktion ausführt. Es empfiehlt sich deshalb, bei einer automatisierten Modifikation von Dateien, etwa bei einer Konvertierung in ein anderes Format, die Datei in ein anderes, nicht überwachtes Verzeichnis zu verschieben und dort zu bearbeiten.

0 Kommentare zu diesem Artikel
2190878