inotifywait - auf Dateiänderungen reagieren

inotifywait wartet auf Änderungen im Dateisystem und reagiert sofort darauf.
Praktisch um automatisch etwas auszuführen wenn eine Datei geändert, erstellt oder gelöscht wird.

Installation

sudo apt-get install inotify-tools

Einfache Verwendung

Auf eine einzelne Datei warten.

inotifywait -e modify /etc/nginx/nginx.conf
echo "nginx.conf wurde geändert"

Verzeichnis überwachen

inotifywait -m -e create,modify,delete /var/www/uploads/

-m läuft dauerhaft statt nach dem ersten Ereignis zu beenden.

Als Endlosschleife für Automatisierung

#!/bin/bash

inotifywait -m -e close_write --format '%f' /var/www/deploy/ | while read filename; do
    echo "Neue Datei: $filename"
    /usr/local/bin/deploy.sh
done

close_write feuert wenn eine Datei fertig geschrieben wurde, nicht bei jedem Schreibzugriff.
--format '%f' gibt nur den Dateinamen zurück.

Rekursiv überwachen

inotifywait -mr -e modify,create,delete /var/www/

-r überwacht Unterverzeichnisse mit.
Vorsicht: bei vielen Dateien und Verzeichnissen braucht das viele inotify-Watches.

Limit erhöhen wenn nötig

cat /proc/sys/fs/inotify/max_user_watches
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches

Dauerhaft in /etc/sysctl.conf.

fs.inotify.max_user_watches=524288