Incron
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