lo script inotify si interrompe dopo la prima modifica


1

Ispirato da questa risposta da superutente ho scritto il seguente copy_library.shscript, salvato nella stessa cartella di un file chiamato library.bib:

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

Se avvio manualmente questo script con ./copy_library.shil processo termina dopo la prima copia (che funziona correttamente):

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

e non vengono rilevate ulteriori modifiche. Sono sicuro che dovrei fare qualcosa con questo script, quindi è in esecuzione continuamente "in background" senza che io debba avviarlo manualmente.

Ma cosa?

Risposte:


2

Dalla inotifywaitpagina man:

inotify attende in modo efficiente modifiche ai file utilizzando l'interfaccia inotify (7) di Linux. È adatto per l'attesa di modifiche ai file dagli script della shell. Può uscire una volta che si verifica un evento o eseguire e generare continuamente eventi nel momento in cui si verificano.

e

-m, --monitor Invece di uscire dopo aver ricevuto un singolo evento, eseguirlo a tempo indeterminato. Il comportamento predefinito è di uscire dopo il primo evento.

EDIT: ho un registro, che viene aggiunto ogni 15 secondi. Lo script seguente esegue un ciclo while per ogni riga prodotta da inotifyread:

#!/bin/sh

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

Nel tuo caso, devi ovviamente cambiare l'evento (modifica) in close_write.


1
Il problema -mè che genera solo nomi di eventi a stdout. Significa che il ciclo while non viene mai chiamato.
LondonRob

Non riesci ad aprire inofifywait -m, reindirizzare l'output e quindi modificare il whileloop leggendo solo le righe stdin? (es. chiama inofifywaituna volta sola) Ci proverò più tardi e segnalerò.
jcoppens,

Vedi EDIT nella mia risposta.
jcoppens,
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.