17 votos

Cómo ejecutar automáticamente una secuencia de comandos cuando el contenido de un directorio cambios en Linux?

Quiero ejecutar automáticamente un script cada vez que se copian los archivos en un directorio en particular. En otras palabras, hay una manera en Linux para "ver" un directorio para los cambios y, a continuación, ejecute algo en respuesta al cambio?

17voto

MikeyB Puntos 26178

Si tienes la suerte de estar en una basadas en debian, la distribución, apt-get install dnotify. Otras distribuciones tienen algo similar - buscar por el dnotify nombre.

dnotify es un programa sencillo basado en Linux kernel 2.4.19+'s dnotify de la API. dnotify puede ejecutar un comando especificado cada vez que el contenido de un determinado los cambios en el directorio. Se ejecuta desde la línea de comandos y toma dos argumentos: uno o más directorios para supervisar y un comando a ejecutar cada vez que un directorio ha cambiado. Opciones de control de lo eventos para desencadenar en: cuando un archivo fue leído en el directorio, cuando uno se crea, borra y así sucesivamente.

Si desea controlar esta dentro de su propio programa, dnotify también es la API que desea utilizar.

12voto

Amit Puntos 29

Puede ejecutar una secuencia de comandos con el inotify-herramientas, algo como esto. Se va a mirar el directorio de los cambios en los archivos modificados, nuevos archivos, y archivos borrados, a continuación, ejecute la secuencia de comandos.

#!/bin/sh
while inotifywait -e modify -e create -e delete /home/me/code; do
    rsync [options] /home/me/code/ /media/nfs/code/ 
done

4voto

Leah Puntos 2156

incron es básicamente lo que quiere, creo. Utiliza inotify como el mecanismo de notificación (que, como otros han señalado, que sustituye a la dnotify), pero no requiere de una secuencia de comandos que se ejecuta continuamente, utilizando inotifywait o similar (aunque, obviamente, el incron demonio está funcionando todo el tiempo). Todo el sistema de crontabs' y el usuario 'crontab' se apoyó en una manera similar a la estándar de cron, pero en lugar de especificar veces como disparadores, inotify eventos y archivos/directorio de nombres que se usan.

incron está empaquetado para muchas distribuciones, como Ubuntu y Debian, creo.

0voto

DukeLion Puntos 2341

Hay una pieza de software exclusivamente para este propósito, autoenv Es posible que desee comprobar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: