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
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:
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
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