inotify script pára após a primeira mudança

1

Inspirado por esta resposta de superusuário eu escrevi o seguinte script copy_library.sh , salvo na mesma pasta que um arquivo chamado library.bib :

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

Se eu iniciar este script manualmente com ./copy_library.sh , o processo sai após a primeira cópia (que funciona com sucesso):

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 nenhuma outra alteração é rastreada. Tenho certeza de que devo fazer algo com esse script para que ele seja executado continuamente "em segundo plano" sem que eu tenha que iniciá-lo manualmente.

Mas o que?

    
por LondonRob 13.05.2015 / 15:45

1 resposta

1

Na página inotifywait man:

inotifywait efficiently waits for changes to files using Linux's inotify(7) interface. It is suitable for waiting for changes to files from shell scripts. It can either exit once an event occurs, or continually execute and output events as they occur.

e

-m, --monitor Instead of exiting after receiving a single event, execute indefinitely. The default behaviour is to exit after the first event occurs.

EDIT: Eu tenho um log, que é anexado a cada 15 segundos. O script a seguir executa o while um loop para cada linha produzida por inotifyread:

#!/bin/sh

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

No seu caso, você tem que mudar o evento (modificar) para close_write, é claro.

    
por 13.05.2015 / 16:06

Tags