Eu tenho um cenário em que estou carregando arquivos .csv para uma pasta específica, / tmp / data_upload, todos os dias, e os arquivos antigos são substituídos pelo novo.
Preciso executar um script Python depois que os dados forem carregados. Para isso, tenho uma ideia de criar um trabalho cron e monitorar as alterações no arquivo. Tentei usar o inotify, mas não gosto muito do domínio Unix. Como eu posso fazer isso?
Preciso executar o script test.py quando houver uma alteração de data de um arquivo na pasta de upload, por exemplo, / tmp / data_upload.
inotify
bibliotecas disponíveis. Veja uma das minhas respostas aqui para um exemplo: askubuntu.com/a/939392/295286Respostas:
Você pode precisar de incrond (inotify cron daemon), que monitora as alterações nos arquivos e depois executa os scripts.
O Incrond pode monitorar, adicionar novos arquivos, modificar, excluir e muito mais. Este é um artigo mostra qual incrond de evento pode monitorar com algum exemplo.
Exemplo para o seu caso, você pode criar o arquivo
/etc/incron.d/data_upload
com o conteúdofonte
incrontab -e
como root e inclua esta linha/tmp/data_upload IN_CREATE,IN_MODIFY test.py
? para que, depois de fazer upload de um novo arquivo, verifique se ele deve executar o arquivo test.py? onde devo colocar o arquivo test.py? devo precisar fornecer um caminho absoluto para isso?Você pode usar entr para executar automaticamente o script sempre que um arquivo for alterado, executando
ls /tmp/data_upload | entr -p script.py
uma vez na inicialização.Site do projeto: http://eradman.com/entrproject/
Página do manual online: https://www.systutorials.com/docs/linux/man/1-entr/
fonte
O utilitário de linha de comando
watchexec
( https://crates.io/crates/watchexec ) parece exatamente o que você precisa, embora eu acredite que para instalá-lo, você precisa ter as ferramentas de construção do Rust instaladas em sua máquina, de modo que pode ser uma Empecilhofonte
Minha abordagem geral seria mexer com o
find
utilitário clássico do Unix . Por exemplo, o comandoencontrará todos os
.csv
arquivos/tmp/upload_data
que foram modificados há menos de um dia e executará o seu,test.py
se houver algum. Obviamente, se o seutest.py
arquivo estiver em outro diretório, você deseja atualizar seu caminho para ele de acordo.Se você executar seu
cron
trabalho com mais frequência do que uma vez por dia, poderá usar ammin
opçãofind
para especificar o tempo máximo desde a modificação em minutos. Por exemplo,procurará por
.csv
arquivos modificados há menos de 60 minutos - útil se o cron executar o trabalho a cada hora.Dois avisos justos estão em ordem: Primeiro, isso não captura os
.csv
arquivos que você excluiu totalmente. Você pode querer verificar estes separadamente. Segundo, não tive tempo de testar nada disso. Espere erros de digitação no meu código que você terá que depurar sozinho.fonte
-cmd
sintaxe? O IIRCfind
leva-exec cmd ;
...