Das Inotify-Skript wird nach der ersten Änderung gestoppt

Das Inotify-Skript wird nach der ersten Änderung gestoppt

Inspiriert vondiese Superuser-AntwortIch habe das folgende copy_library.shSkript geschrieben und im selben Ordner wie eine Datei mit dem Namen gespeichert library.bib:

#!/bin/sh
while inotifywait -e close_write library.bib; do
    cp -f ./library.bib ../other_place/ ;
    echo "Library copied"
done

Wenn ich dieses Skript manuell starte, ./copy_library.shwird der Prozess nach dem ersten Kopieren beendet (was erfolgreich funktioniert):

londonrob ~/mydir
> ./copy_library.sh 
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE 
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>

und es werden keine weiteren Änderungen verfolgt. Ich bin sicher, dass ich mit diesem Skript etwas tun soll, damit es kontinuierlich „im Hintergrund“ läuft, ohne dass ich es manuell starten muss.

Aber was?

Antwort1

Aus der inotifywaitManpage:

inotifywait wartet effizient auf Änderungen an Dateien unter Verwendung der inotify(7)-Schnittstelle von Linux. Es eignet sich zum Warten auf Änderungen an Dateien durch Shell-Skripte. Es kann entweder beendet werden, sobald ein Ereignis eintritt, oder kontinuierlich ausgeführt werden und Ereignisse ausgeben, sobald sie auftreten.

Und

-m, --monitor Anstatt nach dem Empfang eines einzelnen Ereignisses zu beenden, wird das Programm auf unbestimmte Zeit ausgeführt. Das Standardverhalten besteht darin, nach dem Auftreten des ersten Ereignisses zu beenden.

EDIT: Ich habe ein Log, welches alle 15 Sekunden angehängt wird. Das folgende Skript führt die while-Schleife für jede von inotifyread ausgegebene Zeile aus:

#!/bin/sh

inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
    echo "$line"
    echo "Copy coperation here..."
done

In deinem Fall musst du natürlich das Event (modify) in close_write ändern.

verwandte Informationen