martes, 12 de abril de 2011

Implementando un hotfolder en Linux

Una de las ventajas de la consola de UNIX, en general, y de Linux, en particular, es la facilidad de procesar por lotes multitud de ficheros. Eso está bien cuando tenemos todos los ficheros disponibles para ser procesados. Pero, ¿qué pasa cuando queremos montar un "hotfolder", es decir, un directorio donde los usuarios irán dejando sus ficheros para que vayan siendo procesados.


El reto principal consiste en saber cuándo el fichero se ha terminado de enviar, para pasar a procesarlo. Si lo enviáramos mediante un sistema construido a medida, se podría monitorizar el envío y generar un mensaje al finalizar, o implementar cualquier otro mecanismo.


En nuestro caso, queremos que los usuarios suban los ficheros por FTP, con lo cual no podemos añadir ningún mecanismo extra de control a la subida, teniendo que monitorizar el directorio por nuestros propios medios.


Buscando en Internet, hemos encontrados dos métodos que pueden ser útiles para lo que queremos conseguir:


Chequear el tamaño del fichero o si está abierto por algún proceso [1]. Podemos usar el comando fuser. Si el fichero no está en uso, no devolverá salida alguna, mientras que si lo está, nos dirá qué proceso lo está usando. En nuestro caso, el fichero estaría abierto por el servidor de FTP hasta que se complete la transferencia.


Monitorizar el uso de un fichero [2]. Mediante el uso de una utilidad como inotifywait, incluida en el paquete inotify-tools, podemos monitorizar, por ejemplo, cuándo se cierra un fichero en un directorio dado (también se puede hacer recursivamente) y, en el momento en que se produzca el evento, lanzar la ejecución de un proceso (en nuestro caso, el que procesa el fichero).


[1] http://www.unix.com/shell-programming-scripting/153036-check-if-file-finished-copy.html


[2] http://linux.die.net/man/1/inotifywait

No hay comentarios:

Publicar un comentario