Watchdog: watchmedo detecta a alteração do arquivo, mas executa o comando duas vezes

Criado em 3 mai. 2018  ·  3Comentários  ·  Fonte: gorakhargosh/watchdog

Oi,

Tento este exemplo simples:

watchmedo shell-command --patterns = "*. bin" --command 'copytoserver.bat'

que funciona muito bem: quando um .bin é criado no diretório atual, copytoserver.bat é executado DUAS VEZES, não apenas UMA

É um problema ou estou perdendo algo em provar bons argumentos?

Obrigado pela ajuda

Gilles

Comentários muito úteis

Eu tive o mesmo problema e uma solução rápida foi usar flock -n test.lock CMD para garantir que o processo só pudesse ser executado uma vez

Todos 3 comentários

Na verdade, isso está acontecendo.

No Linux, um simples touch filename emitiria 2 mensagens: a criação e a modificação do arquivo, se o arquivo não existir. Provavelmente o mesmo está acontecendo no Windows, e é por isso que ele está sendo executado duas vezes em vez de uma vez.

Salvar em vim aqui com algum parâmetro arbitrário fez com que fosse executado 11 vezes. Provavelmente porque está incluindo exclusão de arquivo, criação de arquivo temporário e renomeação.

Provavelmente seria melhor dividir este projeto em 2: a biblioteca ( watchdog ) e o aplicativo shell ( watchmedo ). Não sei quantos usuários dependem de ambos, mas talvez a filtragem de eventos não deva ser a mesma em ambos e isso pode se tornar um fardo para manter.

Corrigi esse problema na dose adicionando um único corredor com um "debouncer" que:

  • Espera $ 10 ms $ antes de iniciar o trabalho acionado
  • Ignora novos eventos durante os próximos $ 50 ms $
  • Mata / reinicia o trabalho quando um novo evento ocorre depois disso $ 50 ms $

Na verdade, isso era tão rápido que costumava quebrar o watchdog no Linux devido a um evento estranho acontecendo em um diretório excluído, então eu consertei o upstream.

Mas, isso é um problema em relação a um único corredor acionado por um evento. É um aplicativo (como o comando watchmedo shell-command ). Se quiséssemos ter ações distintas para eventos distintos, com algumas delas talvez rodando em paralelo, seria um erro filtrar os eventos que estão próximos no tempo. Dito isso, o problema não está na biblioteca watchdog , mas em watchmedo .

Eu tive o mesmo problema e uma solução rápida foi usar flock -n test.lock CMD para garantir que o processo só pudesse ser executado uma vez

Esta página foi útil?
0 / 5 - 0 avaliações