El script inotify se detiene después del primer cambio.

El script inotify se detiene después del primer cambio.

Inspirado poresta respuesta de superusuarioHe escrito el siguiente copy_library.shscript, guardado en la misma carpeta que un archivo llamado library.bib:

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

Si inicio este script manualmente y ./copy_library.shel proceso sale después de la primera copia (que funciona correctamente):

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

y no se rastrean más cambios. Estoy seguro de que debo hacer algo con este script para que se ejecute continuamente "en segundo plano" sin tener que iniciarlo manualmente.

¿Pero que?

Respuesta1

Desde la inotifywaitpágina de manual:

inotifywait espera eficientemente cambios en los archivos usando la interfaz inotify(7) de Linux. Es adecuado para esperar cambios en archivos desde scripts de shell. Puede salir una vez que ocurre un evento o ejecutar y generar eventos continuamente a medida que ocurren.

y

-m, --monitor En lugar de salir después de recibir un solo evento, ejecútelo indefinidamente. El comportamiento predeterminado es salir después de que ocurra el primer evento.

EDITAR: Tengo un registro, que se agrega cada 15 segundos. El siguiente script ejecuta el bucle while one para cada línea generada por inotifyread:

#!/bin/sh

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

En tu caso, tienes que cambiar el evento (modificar) a close_write, por supuesto.

información relacionada