Ich möchte automatisch ein Skript ausführen, wenn neue Dateien in ein bestimmtes Verzeichnis kopiert werden. Mit anderen Worten, gibt es in Linux eine Möglichkeit, ein Verzeichnis auf Änderungen zu "beobachten" und dann als Reaktion auf die Änderung etwas auszuführen?
17
Antworten:
Wenn Sie Glück haben, auf einer Debian-basierte Distribution zu sein
apt-get install dnotify
. Andere Distributionen haben wahrscheinlich etwas Ähnliches - suchen Sie nach demdnotify
Namen.Wenn Sie dies in Ihrem eigenen Programm erledigen möchten, ist dnotify auch die API, die Sie verwenden möchten.
quelle
emerge inotify-tools
Sie können ein Skript mit den inotify-Werkzeugen ausführen. Es überwacht das Verzeichnis auf Änderungen an geänderten Dateien, neuen Dateien und gelöschten Dateien und führt dann das Skript aus.
quelle
incron ist im Grunde was du willst, denke ich. Es verwendet inotify als Benachrichtigungsmechanismus (der dnotify, wie bereits erwähnt, ersetzt), erfordert jedoch kein Skript, das kontinuierlich ausgeführt wird und inotifywait oder ähnliches verwendet (obwohl der Incron-Dämon natürlich die ganze Zeit ausgeführt wird). Systemweite 'crontabs' und 'crontabs' von Benutzern werden auf ähnliche Weise wie bei Standard-Cron unterstützt, aber anstatt Zeiten als Trigger anzugeben, werden inotify-Ereignisse und Datei- / Verzeichnisnamen verwendet.
Ich glaube, dass Incron für viele Distributionen, einschließlich Ubuntu und Debian, gepackt ist.
quelle
Es gibt nur für diesen Zweck eine Software, autoenv. Vielleicht möchten Sie sie überprüfen.
quelle
entr ist das einfachste und komponierbarste Tool zur Benachrichtigung von Dateien, das ich je gesehen habe. Seine Verwendung ist eher für das Ansehen von Dateien als von Verzeichnissen optimiert, kann aber auch Ihren Fall lösen.
Um die hinzugefügte Datei zu erkennen und zu bearbeiten, kombinieren Sie sie mit anderen Tools wie z
make
.entr
Sendet den Namen oder ähnliches nicht, läuft einfach so, wie Sie es befohlen haben.So suchen Sie in einem Verzeichnis nach hinzugefügten Dateien:
Wenn Sie auch handeln möchten, wenn sich eine vorhandene Datei ändert:
... und hier ist der Schleifenmechanismus nützlich, da der
find
Ausdruck erneut ausgeführt wird, wenn eine Datei hinzugefügt wird.Wenn Sie eine bessere Fehlerbehandlung wünschen und sicherstellen möchten, dass die Dinge nur einmal pro hinzugefügter / entfernter Datei ausgeführt werden, werden die Dinge etwas eigenartig, aber für diese einfachen Fälle ist es brillant.
BEARBEITEN: Wenn Sie dies auf Systemebene tun möchten, zum Beispiel mit Incron , fügen Sie das Skript einfach Ihrem bevorzugten Prozessmanager hinzu (wie s6 , runit , systemd oder sysvinit) und überspringen Sie die Schleife:
Die
exec
und die Prozessersetzung (<(...)
) sind wichtig, wenn ein Prozessmanager ausgeführt wird, um die Signalisierung ordnungsgemäß zu handhaben (dh um die Shell aus dem Weg zu räumen).quelle