Una buena manera de manejar/procesar archivos que se crean en momentos aleatorios es usar incron
en lugar de cron
. (Nota:dado que incron utiliza el inotify
del kernel de Linux syscalls, esta solución solo funciona con Linux).
Mientras que cron
ejecuta un trabajo basado en fechas y horas, incron
ejecuta un trabajo basado en cambios en un directorio supervisado. Por ejemplo, puede configurar incron para ejecutar un trabajo cada vez que se crea o modifica un nuevo archivo.
En Ubuntu, el paquete se llama incron
. No estoy seguro acerca de RedHat, pero creo que este es el paquete correcto:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
.
Una vez que instale el paquete incron, lea
man 5 incrontab
para obtener información sobre cómo configurar el archivo de configuración de incrontab. Tu incron_config
el archivo podría verse así:
/var/ss01/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss02/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss03/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss04/ IN_CLOSE_WRITE /path/to/processing/script.py $#
Luego, para registrar esta configuración con el demonio incrond, ejecutaría
incrontab /path/to/incron_config
Eso es todo al respecto. Ahora cada vez que se crea un archivo en /var/ss01, /var/ss02, /var/ss03 o /var/ss04, el comando
/path/to/processing/script.py $#
se ejecuta, con $# reemplazado por el nombre del archivo recién creado.
Esto obviará la necesidad de almacenar/comparar hashes, y los archivos solo se procesarán una vez, inmediatamente después de que se creen.
Solo asegúrese de que su secuencia de comandos de procesamiento no escriba en el nivel superior de los directorios monitoreados. Si lo hace, entonces incrond notará la creación del nuevo archivo y ejecutará script.py nuevamente, enviándolo a un bucle infinito.
incrond monitorea directorios individuales y no monitorea recursivamente subdirectorios. Por lo tanto, puede indicarle a tshark que escriba en /var/ss01/tobeprocessed, use incron para monitorear/var/ss01/tobeprocessed y haga que su script.py escriba en /var/ss01, por ejemplo.
PD. También hay una interfaz de python para inotificar, llamada pyinotify . A diferencia de incron, pyinotify puede monitorear subdirectorios recursivamente. Sin embargo, en su caso, no creo que la función de monitoreo recursivo sea útil o necesaria.