====== Inotify ====== [[wp>Inotify]] ist ein [[linux:Kernel]]-Subsystem das Dateiänderungen überwacht und diese an Anwendungen meldet. Es ist als Ersatz für dnotify seit [[linux:Kernel]] 2.6.13 standardmäßig enthalten. Diese Aktionen sind überwachbar: ^ Aktion ^ Bedeutung ^ | access | Zugriff auf Datei | | modify | Dateiänderung | | attrib | Dateiattribute wurde verändert | | close_write | Datei geschlossen, nachdem sie im schreibmodus geöffnet wurde | | close_nowrite | Datei geschlossen, nachdem sie im Nur-lese-modus geöffnet wurde | | close | Datei geschlossen, egal in welchem Modus | | open | Datei wurde geöffnet | | move | Eine Datei im beobachtetem Verzeichnis wurde verschoben | | create | eine Datei im beobachtetem Verzeichnis wurde erstellt | | delete | eine Datei im beobachtetem Verzeichnis wurde gelöscht | | delete_self | die beobachtete Datei selbst wurde gelöscht | | unmount | das Dateisystem die die beobachtete Datei enthält wurde ausgehangen (umounted) | Die maximale Anzahl überwachbarer Objekte (pro Benutzer) steht in ''/proc/sys/fs/inotify/max_user_watches'' (Standard: 8192). ===== Links ===== * [[http://www.ende-der-vernunft.org/2006/02/02/mit-inotify-das-dateisystem-ueberwachen/|Mit inotify das Dateisystem überwachen]] * [[http://www.ende-der-vernunft.org/2006/08/10/mit-inotify-das-dateisystem-ueberwachen-teil-2/|Mit inotify das Dateisystem überwachen – Teil 2]] * [[http://www.linux-magazin.de/Ausgaben/2007/03/Unter-der-Lupe|Verzeichnisse überwachen mit Iwatch]] ===== Programme ===== * [[http://inotify.aiken.cz/|Incron]] - behandelt Dateisystem-events * [[http://sourceforge.net/projects/iwatch/|iWatch]] ===== Beispiele ===== ==== Beobachtet Änderungen in einem Verzeichnis ==== Aufruf: ./watch-dir.sh VERZEICHNIS #!/bin/sh dir="$1" while { inotifywait -e modify -e close_write -e create "$dir"; }; do # echo "/bin" | mail -s "Change in $dir" root echo Änderung im Verzeichnis "$dir" done ==== Änderungen in der letzten Zeile der Datei finden ==== Sende eine E-Mail an root@domain.tld wenn in der letzten Zeile der Datei ''/var/logs/error.log'' die Zeichenkette "ALARM" steht. #!/bin/sh file="/var/logs/error.log" empfaenger="root@domain.tld" while { inotifywait -e modify "$file"; }; do if { tail -n 1 "$file" | grep "ALARM"; }; then echo "ALARM gefunden" | mail -s "Betreff ALARM gefunden" $empfaenger fi done ==== inotify-daemon Beispiel ==== Prüft ob nur eine Instanz des Scripts läuft und führt Aktion (hier eine e-Mail) aus wenn Änderung erfolgt. #!/bin/sh file="/srv/www/logs/error.log" email="root" PIDFILE="/var/run/INOTIFY.pid" # change! # check if running - stolen from dhcpd3 initscript check_status() { if [ ! -r "$PIDFILE" ]; then test "$1" != -v || echo "$0 is not running." touch "$PIDFILE" return 0 fi if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then test "$1" != -v || echo "$0 is running." return 1 else test "$1" != -v || echo "$0 is not running but PIDFILE $PIDFILE exists." return 0 fi } #exit if $0 is running check_status || exit # write my new PID to PIDFILE echo $$ > "$PIDFILE" while { inotifywait -e modify "$file"; }; do if { tail -n 1 "$file" | grep "Suchbegriff"; }; then echo "Suchbegriff gefunden" | mail -s "Betreff - Suchbegriff gefunden" $email fi done