Lösung 1:
Wenn Sie das Glück haben, auf einer Debian-basierten Distribution zu sein, apt-get install dnotify
. Andere Distributionen haben wahrscheinlich etwas Ähnliches - suchen Sie nach dnotify
Name.
dnotify ist ein einfaches Programm, das auf der dnotify-API des Linux-Kernels 2.4.19+ basiert. dnotify kann jedes Mal, wenn sich der Inhalt eines bestimmten Verzeichnisses ändert, einen bestimmten Befehl ausführen. Es wird von der Befehlszeile ausgeführt und nimmt zwei Argumente entgegen:ein oder mehrere zu überwachende Verzeichnisse und einen Befehl, der ausgeführt wird, wenn sich ein Verzeichnis geändert hat. Optionen steuern, welche Ereignisse ausgelöst werden:wenn eine Datei im Verzeichnis gelesen wurde, wenn eine erstellt, gelöscht wurde und so weiter.
Wenn Sie dies in Ihrem eigenen Programm handhaben möchten, ist dnotify auch die API, die Sie verwenden möchten.
Lösung 2:
Sie können ein Skript mit den inotify-tools ausführen, etwa so. Es überwacht das Verzeichnis auf Änderungen in modifizierten Dateien, neuen Dateien und gelöschten Dateien und führt dann das Skript aus.
#!/bin/sh
while inotifywait -e modify -e create -e delete /home/me/code; do
rsync [options] /home/me/code/ /media/nfs/code/
done
Lösung 3:
Incron ist im Grunde das, was Sie wollen, denke ich. Es verwendet inotify als Benachrichtigungsmechanismus (der, wie andere angemerkt haben, dnotify ersetzt), erfordert aber kein Skript, das kontinuierlich ausgeführt wird, indem es inotifywait oder ähnliches verwendet (obwohl der Incron-Daemon offensichtlich die ganze Zeit läuft). Systemweite 'Crontabs' und Benutzer-'Crontabs' werden ähnlich wie Standard-Cron unterstützt, aber anstatt Zeiten als Auslöser anzugeben, werden Inotify-Ereignisse und Datei-/Verzeichnisnamen verwendet.
Incron ist für viele Distributionen gepackt, einschließlich Ubuntu und Debian, glaube ich.