Supervisando el Sistema de Ficheros
Existe una utilidad que nos permite un control del sistema de ficheros llamada inotify cron (incron). Su funcionamiento es similar a Cron salvo que en lugar de actuar a una fecha, actúa a un cambio en un directorio. Con este demonio podremos:
- Reproducir un sonido cuando un fichero cambie.
- Recargar un servicio cuando el fichero de configuración cambie.
- Notificar a un usuario de que tiene nuevo correo.
- Vigilar cambios en ficheros críticos.
- Procesar los archivos subidos (ftp, …)
IN_ACCESS: Vigila si el archivo es accedido.
IN_MODIFY: Vigila si el archivo es modificado.
IN_ATTRIB: Vigila los cambios en los metadatos (permisos, atributos, fechas, …)
IN_CLOSE_WRITE: Cerrado un fichero de lectura/escritura.
IN_CLOSE_NOWRITE: Cerrado un archivo de sólo lectura.
IN_OPEN: Archivo abierto.
IN_MOVED_FROM: Se ha movido el fichero fuera del directorio vigilado.
IN_MOVED_TO: Se ha movido el fichero dentro del directorio vigilado.
IN_CREATE: Nuevo fichero/directorio creado dentro del directorio vigilado.
IN_DELETE: Fichero/directorio eliminado del directorio vigilado.
IN_DELETE_SELF: Supervisa si se elimina el directorio vigilado.
IN_CLOSE: Superivsa los eventos IN_CLOSE_WRITE e IN_CLOSE_NOWRITE
IN_MOVE: Supervisa los eventos IN_MOVED_FROM e IN_MOVED_TO
IN_ALL_EVENTS: Supervisa todos los eventos listados.
IN_DONT_FOLLOW: No sigue enlaces simbólicos.
IN_ONLYDIR: Supervisa el path únicamente si es un directorio.
IN_MOVE_SELF: Supervisa el borrado del fichero/directorio.
Para instalarlo:[root@maquina ] # apt-get install incron
La configuración que viene por defecto es válida, sólo está comentada y tenemos que descomentarla, uno de los puntos es que editor usar para añadir las líneas de acciones. El fichero se encuentra en /etc/incronconf. Para crear las tablas de acciones de usuario, hacemos al igual que cron y vamos a /var/spool/incron y creamos los fichero root y usuario, para que tanto root como nuestro usuario tengan acceso a incron. Después editamos el archivo /etc/incron.allow para añadir a root y a usuario.
La sintaxis del archivo de acciones es similar al de cron. Accedemos mediante.[usuario@maquina ] $ incrontab -e
Y nos recibirá nuestro editor favorito. Escribimos las acciones que queremos de la forma:/path/to/dir EVENTO ACCION
De forma que cada vez que ocurra el evento en la ruta responda con esa acción. Por ejemplo:/home/ftp IN_CREATE enviarEmail.py
/etc/apache/httpd.conf IN_MODIFY apache2graceful
En la primera línea decimos que si alguien sube algo nuevo a nuestro servidor de ftp no avise con un correo electrónico. La segunda recarga nuestro servidor web cuando hemos hecho alguna modificación al archivo de configuración.
Otra cosa que tiene incron son los caracteres comodines, se utilizan para referenciar al path y/o al archivo/directorio que estamos tratando. Son los siguientes:
$$ - Símbolo del dólar.
$@ - El path del sistema de ficheros supervisado, esto es, el nombre del directorio si estamos vigilando un directorio.
$# - El nombre de fichero relativo al evento, esto es, el nombre relativo del ficheros si estamos vigilando un directorio. El path absoluto se obtiene con $@/$#
$% - La señal de evento en texto.
$& - La señal de evento en número.
Fuentes:
http://www.linux.com/feature/144666
http://dailypackage.fedorabook.com/index.php?/archives/102-Productive-Monday-Incron-Execute-commands-based-on-filesystem-activity.html

Wow! A esto se le puede sacar mucha “sustancia”, a ver si me ánimo y le dedico día y medio
Comment by nickel — September 10, 2008 @ 6:26 pm
Hola,
sí que es muy útil incron, el problema es que no es recursivo (no permite vigilar subdirectorios que se creen dentro de un directorio).
Para solucionarlo he intentado que cada vez que se cree un subdirectorio se añada una línea en la tabla de incron para supervisarlo también, pero no he conseguido que se escriba. ¿Puede ser porque mientras se está leyendo la tabla no es posible modificarla?
Comment by Ayla — September 25, 2008 @ 12:55 pm
@Ayla, tienes razón en la recursividad, sin embargo si puedes modificar la tabla de incron en tiempo de ejecución para añadir nuevas supervisiones de los subdirectorios que crees bajo el directorio raíz.
Comment by nordri — September 26, 2008 @ 12:10 pm
¿De verdad? Yo lo he intentado pero no me ha funcionado. ¿Puedes decirme cómo lo has hecho? De todas formas el creador de incron me ha sugerido usar pyinotify, así que supongo que podría ser una solución.
Comment by Ayla — September 28, 2008 @ 12:52 pm