Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como lidar com novos arquivos para processar no cron job


Uma boa maneira de manipular/processar arquivos que são criados aleatoriamente é usar oincron 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.