Uno script di shell può attendere che un file cambi e agire?


12

Mi chiedo se riesco a scrivere uno script che monitorerà la modifica di un file ed eseguirà alcune azioni quando viene rilevata la modifica.

Spiegazione dettagliata:

  1. OpenVPN scrive il suo stato su un file ogni 1 minuto.
  2. Devo analizzare questo file di stato e agire.
  3. OpenVPN tronca il file di stato prima di scriverlo.
  4. Ho provato a scrivere su una pipa denominata, ma ottengo errori indesiderati (ma non fatali) nell'app quando non riesce a troncare la pipa.

Nel caso in cui la modifica sia effettivamente aggiunta al file, tail -fprobabilmente è il modo più semplice di aggrapparsi . Ma solo per aggiungere.
SF.

Risposte:


21

Cheap n 'modo sporco:

Ripeti stat -c %Y filee agisci quando cambia il tempo di modifica.

Probabilmente meglio:

Utilizzare il servizio cron inotify per controllare gli eventi di modifica dei file ed eseguire l'azione:

/path/to/your/file IN_MODIFY /path/to/your/script $#

+1 per la seconda soluzione
Michael Lowman,


2

inotify sarebbe il modo giusto per farlo. In questa edizione della rivista LinuxForYou sono forniti tutorial per questa domanda.


0

Quindi avere una sceneggiatura che:

1) Controlla il tempo di modifica sul file (con stat)
2) Se il tempo di modifica è più recente di quando è stato verificato l'ultima volta, è cambiato
3) Analizzalo ed esegui la tua azione
4) Altrimenti dormi per 1 minuto e poi ricarica


0

Modo rapido e sporco:

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

wait_file_changed /tmp/potato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.