incron - Dateisystemevents

linux debian incron cron

Cronjobs sind praktisch und fast jeder Admin nutzt sie. Leider finden sich häufig auch Jobs in der Liste, die sehr häufig ausgeführt werden (z.B. jede Minute), weil der Admin nicht weiß, wann es tatsächlich nötig wäre, den Job zu starten. Häufig kann hier incron helfen.

Anders als klassische Cronjobs funktioniert incron nicht zeitbasiert, sondern achtet auf Events im Dateisystem. So lassen sich Aufgaben ausführen, wenn z.B. in einem Verzeichnis eine neue Datei erzeugt wird.

Die Installation erfolgt mittels:

apt install incron

Anschließend wird die Datei /etc/incron.allow mit den Benutzernamen befüllt, die incron verwenden dürfen:

root

Die eigentlichen Jobs können, ähnlich wie bei Cronjobs, mit dem Befehl incrontab -e editiert und mittels incrontab -l aufgelistet werden, alternativ kann pro Job eine Datei in /etc/incron.d/ erzeugt werden.

Der Aufbau einer Jobdefinition ähnlich dem eines Cronjob, enthält aber natürlich keine Zeitangaben. Stattdessen werden Dateisystemevents genutzt, folgende Events sind möglich:

Event Beschreibung
IN_ACCESS Datei wurde gelesen
IN_ATTRIB Metadaten wurden geändert (permissions, timestamps, etc.)
IN_CLOSE_WRITE Zum schreiben geöffnete Datei wurde geschlossen
IN_CLOSE_NOWRITE Zum lesen geöffnete Datei wurde geschlossen
IN_CREATE Datei/Verzeichnis wurde erzeugt
IN_DELETE Datei/Verzeichnis wurde gelöscht
IN_DELETE_SELF Die überwachte Datei/Verzeichnis selbst wurde gelöscht
IN_MODIFY Datei wurde verändert
IN_MOVE_SELF Die überwachte Datei/Verzeichnis selbst wurde verschoben
IN_MOVED_FROM Eine Datei wurden aus dem überwachten Verzeichnis heraus verschoben
IN_MOVED_TO Eine Datei wurden in das überwachte Verzeichnis verschoben
IN_OPEN Eine Datei wurde geöffnet
IN_ALL_EVENTS Einer der oben aufgeführten Events (egal welcher)
IN_DONT_FOLLOW Der überwachte Pfad/Datei darf kein Symlink sein
IN_ONESHOT Überwacht einen Pfad für nur einen einzigen Event
IN_ONLYDIR Events werden nur beachtet, wenn der zu überwachende Pfad keine Datei ist
IN_NO_LOOP Verhindert die Überwachung weiterer Events, so lange der erste Event nicht vollständig abgearbeitet wurde

Mehrere Events können miteinander Kombiniert werden, die einzelnen Events werden hierbei mittels Komma getrennt, z.B.: IN_ATTRIB,IN_CLOSE_WRITE

Der Aufbau der Jobdefinition besteht immer aus <pfad/datei> <event> <befehl>, also z.B.:

/var/logs/errors/ IN_CREATE /opt/notify/log_notify.sh $@ $# $%

Mit der obigen Jobdefinition würde incron immer dann wenn eine Datei in /var/logs/errors/ erstellt wird, das Script /opt/notify/log_notify.sh ausführen. Außerdem würden einige Parameter an das Script übergeben, die das Script dann nutzen kann. Folgende Parameter sind möglich:

Parameter Beschreibung
$$ Übergibt ein $ Zeichen (statisch)
$@ Übergibt den überwachten Pfad (/var/logs/foobar)
$# Übergibt den Dateinamen (der neu erzeugten Datei)
$% Übergibt Event-Flags als Text (IN_CREATE)
$& Übergibt Event-Flags als Zahl

Das Script könnte dann z.B. wie folgt aussehen:

#!/bin/bash

cat ${1}${2} | mail -s "Error ${2}" fixme@invalid.org

Sobald also in /var/log/errors/ eine neue Datei erzeugt wurde, wird das Script ausgeführt, welches dann die neu erzeugte Datei ausgibt und per Mail versendet. Hierbei sollte man vorsichtig sein, da man sonst von Mails erschlagen wird, aber ich denke das Prinzip wird soweit ganz gut klar.


Kommentare

Kommentare unterstützt von Disqus.

Nächster Beitrag Vorheriger Beitrag