Incron, un cron guiado por eventos inotify

Estándar

El otro día estaba buscando una alternativa en Linux al programa Hazel para Linux, es decir una aplicación que lanzara acciones guiadas por cambios en carpetas y ficheros.

Buscando un poco encontré incron, que es un programa en forma de demonio (daemon) para Linux. Este programa se vale de una serie de módulos del kernel que aumentan las capacidades de los sistema de ficheros para poder notificar ante cambios en el propio sistema de ficheros. A esto se le llama inotify y se corresponde con las dos primeras letras de incron.

Incron viene de las siglas Inotify cron y se usa justamente como su primo lejano cron, define una serie de reglas que han de activarse ante un determinado suceso. En el caso de cron este suceso es el tiempo, en el caso de incron notificaciones de inotify acerca de cambios en carpetas o ficheros. Para instalarlo usamos el gestor de paquetes preferido ya que es una aplicación estándar de Linux y se encuentra en todos los repositorios, en el caso de ArchLinux:

pacman -S incron

El programa, al igual que cron, se sirve de un daemon para funcionar, por lo que si queremos que se inicie con el sistema deberemos agregarlo a nuestra declaración de daemons, en el caso de Arch en el archivo /etc/rc.conf.

Es recomendable crear el fichero /etc/incron.allow para incluir los usuarios que podrán declarar reglas de incron, por aquello de la seguridad y eso :p. Si sólo queremos que el usuario root pueda crearlas, lo añadiremos a ese fichero.

Sintaxis

La sintaxis de las reglas de incron es similar a las de cron, por lo que si lo habéis usado previamente os será familiar:

Directorio_o_fichero   Máscara_de_actuación   Acción

Donde:

  • Directorio_o_fichero: Directorio (no se trata de manera recursiva) o fichero sobre el que se van a monitorizar los cambios.
  • Máscara_de_actuación: Máscaras, entre las posibles, de cambios a monitorizar en los objetivos. Las máscaras más útiles son:
    • IN_ACCESS: el fichero ha sido leido.
    • IN_MODIFY: el fichero fue modificado.
    • IN_MOVED_FROM: fichero movido desde el directorio observado
    • IN_MOVED_TO: fichero movido al directorio observado.
    • IN_OPEN: el fichero fue abierto
    • IN_CREATE: un fichero/directorio fue creado en el directorio.
    • IN_DELETE: un fichero/directorio fue eliminado en el directorio.
    • ALL_EVENTS: bastante autoexplicativo, se lanzará en todos los casos.
  • Acción: Órden o script que se ejecutará al cuando se cumplan las condiciones de notificación. En este campo se pueden usar las siguientes variables:
    • $$: signo del dolar.
    • $@: ruta al directorio contenedor
    • $#: fichero o directorio observado sin su ruta
    • $%: evento que provoca la notificación
    • $&: número del evento que se ejecutó

Creación de reglas

Incron nos proporciona una serie de comandos de terminal que nos son útiles a la hora de trabajar con estas reglas. Si desde el usuario que quiere trabajar con incron ejecutamos el comando incrontab -l se nos mostrarán las reglas creadas por ese usuario.

Para la creación de nuevas reglas usaremos el comando incrontab -e que nos abrirá el editor que tengamos elegido en el sistema como favorito, presumiblemente vim :p.

A partir de aquí la imaginación de cada uno es la responsable de dirimir qué tipo de reglas son útiles para uno mismo y qué le podemos exprimir a este programa.

Ejemplos y casos de uso

Me gustaría destacar algunos usos que se le pueden dar a esta aplicación además del que yo quería darle en un principio, organizar una carpeta.

Copias de seguridad de una carpeta importante: quizás uno de los usos más lógicos para este demonio. Volcar el contenido a un directorio remoto con rsync o quizá a una partición extra de nuestro disco duro, para ofrecer un duplicado de los datos.

Monitorización de eventos del sistema: queremos volcar al logger un evento que ha sucedido en el sistema con la modificación de algún fichero, este es nuestro programa.

#Registramos todos los eventos en la carpeta /tmp
/tmp IN_ALL_EVENTS logger "/tmp action for $# file"

Autocompilaciones: este es un uso curioso que se le puede dar a incron, como bien dice en este blog, incron se puede usar para compilar un fichero less (lenguaje de hojas de estilo) a css con una sencilla orden de incron.

Reinicio automático de servicios:: por último, y no menos importante, un uso para los administradores de sistemas. Si modificamos habitualmente las configuraciones de algunos servicios como un servidor web o un servidor LDAP, es un coñazo el tener que estar reiniciando el servicio cada vez que cambiamos línea del fichero de configuración. Con incron podemos hacerlo sin tener que realizar la misma orden del orden de unas treinta veces por minuto.

#Monitorizamos los cambios en el fichero de configuración de apache para reiniciarlo cuando se produzcan
/etc/httpd.conf ON_MODIFY /etc/rc.d/httpd restart
Anuncios

2 comentarios en “Incron, un cron guiado por eventos inotify

  1. Heya i am for the first time here. I came across this board and I find It
    truly useful & it helped me out a lot. I hope to give something back and aid others like you aided me.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s