Kann ein Shell-Skript darauf warten, dass sich eine Datei ändert, und Maßnahmen ergreifen?

12

Ich frage mich, ob ich ein Skript schreiben kann, das eine Änderung in einer Datei überwacht und eine Aktion ausführt, wenn die Änderung erkannt wird.

Ausführliche Erklärung:

  1. OpenVPN schreibt seinen Status alle 1 Minute in eine Datei.
  2. Ich muss diese Statusdatei analysieren und Maßnahmen ergreifen.
  3. OpenVPN schneidet die Statusdatei vor dem Schreiben ab.
  4. Ich habe versucht, in eine Named Pipe zu schreiben, aber es werden unerwünschte (aber nicht schwerwiegende) Fehler in der App angezeigt, wenn die Pipe nicht abgeschnitten werden kann.
davidparks21
quelle
Falls die Änderung tatsächlich Anhänge an die Datei, auf Hang tail -fist wahrscheinlich der einfachste Weg. Aber nur zum Anhängen.
SF.

Antworten:

21

Cheap und schmutzig weg:

Wiederholen stat -c %Y fileund Maßnahmen ergreifen, wenn sich die Änderungszeit ändert.

Wahrscheinlich besser:

Verwenden Sie den inotify cron-Dienst, um nach Ereignissen für Dateiveränderungen zu suchen und Ihre Aktion auszuführen:

/path/to/your/file IN_MODIFY /path/to/your/script $#
Cakemox
quelle
+1 für die zweite Lösung
Michael Lowman
2

Inotify wäre der richtige Weg, dies zu tun. Zu dieser Frage finden Sie in einigen Ausgaben des LinuxForYou-Magazins Anleitungen.

Suhail Sherif
quelle
0

Also haben Sie ein Skript, das:

1) Die Überwachung der Änderungszeit auf die Datei (mit stat)
2) Wenn die Änderungszeit neuer ist als wenn zuletzt geprüft wurde geändert
3) Parse es und führen Sie Ihre Aktion
4) Else Schlaf für 1 Minute und dann reloop

Rafiq Maniar
quelle
0

Schnell und dreckig unterwegs:

function wait_file_changed {
    tail -fn0 "$1" | head -n1
}

wait_file_changed /tmp/potato
dctremblay
quelle