Incron

Aus xinux wiki
Wechseln zu: Navigation, Suche

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 <source lang="bash">

  1. !/bin/bash

$@ | /usr/bin/mail -a "From: root@localhost" -s "test" foo@example.com </source>

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

<source lang="bash">

  1. !/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 </source>

Bugs

Zurzeit sind keine Kommentare in der incrontab Tabelle möglich

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