Eu tenho um script bash com um loop assistindo um diretório recursivamente:
while true
do
if path=`inotifywait -q -r -e create --format %w%f $watchpath`; then
#modify file
fi
done
Se não me engano vem com esse problema:
Se muitos arquivos forem criados nesse diretório ou a máquina estiver ocupada com outras tarefas, um arquivo poderá ser criado antes de inotifywait
ser acessado novamente - o que significaria que ele seria ignorado.
Existe uma maneira de mitigar isso? Talvez haja uma maneira de "assistir" continuamente e processar um fluxo/feed de arquivos modificados?
Uma maneira é executar
inotifywait
no modo monitor, por exemplo:Ainda haverá uma corrida entre os processos, porém, não tenho certeza se existe uma maneira de evitar condições de corrida usando utilitários de shell.
Até mesmo a página man lista isso com ressalvas.
Use o modo monitor
-m
parainotifywait
não sair após a alteração do sistema de arquivos, mas sim para stdout. você pode canalizar esse fluxo para um script de leitura que lê linhas de inotofywait e faz seu processamento.