Uma boa maneira de manipular/processar arquivos que são criados aleatoriamente é usar o
incron
em vez de cron
. (Observação:como o incron usa oinotify
do kernel do Linux syscalls, esta solução só funciona com Linux.) Considerando que
cron
executa um trabalho com base em datas e horas, incron
executa uma tarefa com base nas alterações em um diretório monitorado. Por exemplo, você pode configurar o incron para executar um trabalho sempre que um novo arquivo for criado ou modificado. No Ubuntu, o pacote é chamado
incron
. Não tenho certeza sobre o RedHat, mas acredito que este seja o pacote certo:http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html
. Depois de instalar o pacote incron, leia
man 5 incrontab
para obter informações sobre como configurar o arquivo de configuração incrontab. Seu
incron_config
arquivo pode ser algo assim:/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 $#
Então, para registrar esta configuração com o daemon incrond, você executaria
incrontab /path/to/incron_config
Isso é tudo o que há para isso. Agora sempre que um arquivo é criado em /var/ss01, /var/ss02, /var/ss03 ou /var/ss04, o comando
/path/to/processing/script.py $#
é executado, com $# substituído pelo nome do arquivo recém-criado.
Isso evitará a necessidade de armazenar/comparar hashes, e os arquivos serão processados apenas uma vez - imediatamente após serem criados.
Apenas certifique-se de que seu script de processamento não escreva no nível superior dos diretórios monitorados. Se isso acontecer, o incrond notará o novo arquivo criado e iniciará o script.py novamente, enviando você para um loop infinito.
O incrond monitora diretórios individuais e não monitora subdiretórios recursivamente. Assim, você pode direcionar o tshark para gravar em /var/ss01/tobeprocessed, usar o incron para monitorar/var/ss01/tobeprocessed e fazer com que seu script.py grave em /var/ss01, por exemplo.
PS. Há também uma interface python para inotify, chamada pyinotify . Ao contrário do incron, o pyinotify pode monitorar subdiretórios recursivamente. No entanto, no seu caso, não acho que o recurso de monitoramento recursivo seja útil ou necessário.