Watchdog: watchmedo detecta el cambio de archivo pero ejecuta el comando dos veces

Creado en 3 may. 2018  ·  3Comentarios  ·  Fuente: gorakhargosh/watchdog

Hola,

Intento este simple ejemplo:

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

que funciona bastante bien: cuando se crea un .bin en el directorio actual, copytoserver.bat se ejecuta DOS VECES, no solo UNA VEZ

¿Es un problema o me falta algo al probar buenos argumentos?

Gracias por la ayuda

Gilles

Comentario más útil

Tuve el mismo problema, y ​​una solución rápida fue usar flock -n test.lock CMD para asegurarme de que el proceso solo se pudiera ejecutar una vez

Todos 3 comentarios

De hecho, eso está sucediendo.

En Linux, un simple touch filename emitiría 2 mensajes: una creación de archivo y una modificación de archivo, si el archivo no existe. Probablemente esté sucediendo lo mismo en Windows, y es por eso que se ejecuta dos veces en lugar de una.

Guardarlo en vim aquí con algunos arbitrarios hizo que se ejecutara 11 veces. Probablemente se deba a que incluye la eliminación de archivos, la creación de archivos temporales y el cambio de nombre.

Probablemente sería mejor dividir este proyecto en 2: la biblioteca ( watchdog ) y la aplicación de shell ( watchmedo ). No sé cuántos usuarios dependen de ambos, pero quizás el filtrado de eventos no debería ser el mismo en ambos, y eso podría convertirse en una carga de mantener.

Solucioné este problema en la dosis agregando un solo corredor con un "antirrebote" que:

  • Espera $ 10 ms $ antes de iniciar el trabajo desencadenado
  • Ignora nuevos eventos durante los próximos $ 50 ms $
  • Mata / reinicia el trabajo cuando llega un nuevo evento después de ese $ 50 ms $

En realidad, eso fue tan rápido que solía romper el perro guardián en Linux debido a un evento extraño que sucedía en un directorio eliminado, así que lo arreglé en sentido ascendente.

Pero ese es un problema con respecto a un solo corredor desencadenado por un evento. Es una aplicación (como el comando watchmedo shell-command ). Si quisiéramos tener acciones distintas para eventos distintos, con algunos de ellos quizás ejecutándose en paralelo, filtrar los eventos que ocurren cerca en el tiempo sería un error. Dicho esto, el problema no está en la biblioteca watchdog , sino en watchmedo .

Tuve el mismo problema, y ​​una solución rápida fue usar flock -n test.lock CMD para asegurarme de que el proceso solo se pudiera ejecutar una vez

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Naatan picture Naatan  ·  3Comentarios

hgrecco picture hgrecco  ·  6Comentarios

AndreaCrotti picture AndreaCrotti  ·  3Comentarios

fx86 picture fx86  ·  3Comentarios

boxed picture boxed  ·  6Comentarios