¿Puede un script de shell esperar a que cambie un archivo y tomar medidas?


12

Me pregunto si puedo escribir un script que monitoreará un cambio en un archivo y ejecutará alguna acción cuando se detecte el cambio.

Explicación detallada:

  1. OpenVPN escribe su estado en un archivo cada 1 minuto.
  2. Necesito analizar este archivo de estado y tomar medidas.
  3. OpenVPN trunca el archivo de estado antes de escribir en él.
  4. Intenté escribir en una tubería con nombre, pero recibo errores indeseables (pero no fatales) en la aplicación cuando no se puede truncar la tubería.

En caso de que la modificación realmente se agregue al archivo, tail -fprobablemente la forma más fácil sea aferrarse. Pero solo por anexar.
SF.

Respuestas:


21

Barato y sucio:

Haga un bucle stat -c %Y filey tome medidas cuando cambie el tiempo de modificación.

Probablemente mejor:

Use el servicio cron de inotify para ver los eventos de modificación de archivos y ejecutar su acción:

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

+1 para la segunda solución
Michael Lowman


2

inotify sería la forma correcta de hacerlo. En esta edición de la revista LinuxForYou se ofrecen tutoriales para esta misma pregunta.


0

Entonces tenga un script que:

1) Comprueba el tiempo de modificación en el archivo (con stat)
2) Si el tiempo de modificación es más nuevo que la última vez que lo verificó, ha cambiado
3) Analícelo y realice su acción
4) De lo contrario, duerma durante 1 minuto y luego vuelva a colocar


0

Manera rápida y sucia:

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

wait_file_changed /tmp/potato
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.