Incron

Aus xinux.net
Zur Navigation springen Zur Suche springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

incron ist ein auf inotify basierender cron daemon. Anstelle von Zeit werden die Aktionen von Dateisystem-Events ausgelöst.

Installation

apt-get install incron

Benutzer in /etc/incron.allow eintragen.

echo "root" >> /etc/incron.allow

Konfiguration in /etc/incron.conf

# Speicherort für System Aufgaben
system_table_dir = /etc/incron.d

# Speicherort für Benutzer Aufgaben
user_table_dir = /var/spool/incron

# Erlaubte Benutzer
allowed_users = /etc/incron.allow

# verbotene Benutzer
denied_users = /etc/incron.deny

# Verzeichniss für lock Datei
lockfile_dir = /var/run

# Name der lock Datei
lockfile_name = incrond

# Editor
editor = nano

Job Definition

Liste der Aufgaben

incrontab -l

Aufgaben erstellen

incrontab -e

Aufgabenliste neu laden

incrontab -d

Aufgabenliste löschen

incrontab -r

Als root kann durch angabe des Parameter "-u <USER>" der Benutzer gewechselt werden.

Job Anweisungen haben das Format:

<Pfad> <Event-Maske> <Befehl>

Events

Folgende Standard Masken sind definiert und könne als Event ausgelöst werden

IN_ACCESS
Auf datei wurde (lesend) zugegriffen
IN_ATTRIB
Metadaten wie Dateirechte, Zeitstempel etc. wurden geändert.
IN_CLOSE_WRITE
Zum schreiben geöffnete Datei wurde geschlossen
IN_CLOSE_NOWRITE
Geöffnete (nicht zum schreiben) Datei wurde geschlossen
IN_OPEN
Datei wurde geöffnet
IN_MODIFY
Datei wurde verändert
IN_CREATE
Es wurde eine Datei/Ordner im überwachten Verzeichnis erstellt
IN_DELETE
Es wurde eine Datei/Ordner im überwachten Verzeichnis gelöscht
IN_DELETE_SELF
Überwachte Datei/Ordner wurde gelöscht
IN_MOVE_SELF
Überwachte Datei/Ordner wurde verschoben
IN_MOVED_FROM
Datei wurde aus überwachtem Ordner verschoben
IN_MOVED_TO
Datei wurde in überwachtem Ordner verschoben

Hinzukommen Event-Masken zur Definition

IN_ALL_EVENTS
Erspart manuelle Liste mit allen Events
IN_DONT_FOLLOW
Löse Pfade von symbolischen Links nicht auf
IN_ONESHOT
Über wache den Pfad für nur einen Event lang
IN_ONLYDIR
Überwache den Pfad nur, wenn es ein Verzeichnis ist

Desweiteren gibt es einen Event, welcher nicht in der inotify Bibliothek enthalten ist

IN_NO_LOOP
Unterbreche Überwachung, bis aktueller Event vollständig abgearbeitet ist (bis sein Kindprozess terminiert)

Befehle

In der Befehlsangabe können folgende Variablen genutzt werden

$$ - Dollarzeichen
$@ - Der überwachte Dateisystempfad
$# - Name der Datei, welche den Event auslöste
$% - Der Event (Textformat siehe)
$& - Der Event (Nummerisch)

Beispiele

Sobald in /var/mail eine Datei geändert wurde soll der Befehl asd mit dem vollen Dateipfad aufgerufen werden.

/var/mail IN_CLOSE_WRITE asd $@/$#


Schreibe einen Log-Eintrag sobalt eine Datei im Verzeichniss /data geändert, erstellt, gelöscht oder verschoben wird.

/data IN_MODIFY,IN_CREATE,IN_DELETE,IN_MOVED_FROM,IN_MOVED_TO echo "$(date) file: $# in: $@ event: $%" >> /var/log/mylog.log


Schreibe eine Mail sobald in /var/log/error.log Meldungen geschrieben werden.

/var/log/error.log IN_MODIFY /usr/local/bin/sendamail tail -n 1 $@

/usr/local/bin/sendamail

#!/bin/bash
$@ | /usr/bin/mail -a "From: root@localhost" -s "test" foo@example.com

Verzeichniss Rekursiv überwachen

Zurzeit ist es nicht ohne weiteres möglich ein Verzeichnis rekursiv zu überwachen. Als Workaround kann jedoch mit find jeder Unterordner zu incron hinzugefügt werden

#!/bin/bash
path=/test
event=IN_CREATE,IN_CLOSE_WRITE
command='echo do something with \$@/\$#'
name=test

find ${path} -type d -print0 | xargs -0 -I{} echo "{} ${event} ${command}" > /etc/incron.d/${name}.conf

Bugs

Zurzeit sind keine Kommentare in der incrontab Tabelle möglich

Siehe: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=452241