Hallo,
Ich versuche dieses einfache Beispiel:
watchmedo Shell-Befehl --patterns="*.bin" --command 'copytoserver.bat'
was ganz gut funktioniert: Wenn eine .bin im aktuellen Verzeichnis erstellt wird, wird copytoserver.bat ZWEIMAL ausgeführt, nicht nur EINMAL
Ist es ein Problem oder fehlt mir etwas beim Verbieten guter Argumente?
Danke für die Hilfe
Gilles
Tatsächlich passiert das.
Unter Linux würde ein einfaches touch filename
2 Nachrichten ausgeben: eine Dateierstellung und eine Dateiänderung, wenn die Datei nicht existiert. Wahrscheinlich passiert dasselbe in Windows, und deshalb wird es zweimal statt einmal ausgeführt.
Das Speichern auf vim
hier mit einigen willkürlichen hat es 11 Mal ausgeführt. Dies liegt wahrscheinlich daran, dass Dateien gelöscht, temporäre Dateien erstellt und umbenannt werden.
Wahrscheinlich wäre es besser, dieses Projekt in 2 aufzuteilen: die Bibliothek ( watchdog
) und die Shell-Anwendung ( watchmedo
). Mir ist nicht bekannt, wie viele Benutzer sich auf beide verlassen, aber vielleicht sollte die Ereignisfilterung bei beiden nicht gleich sein, und die Wartung könnte zu einer Belastung werden.
Ich habe dieses Problem bei der Dosis behoben, indem ich einen einzelnen Läufer mit einem "Entpreller" hinzugefügt habe, der:
Tatsächlich war das so schnell, dass der Watchdog unter Linux aufgrund eines seltsamen Ereignisses in einem gelöschten Verzeichnis unterbrochen wurde, also habe ich es im Upstream behoben.
Aber das ist ein Problem in Bezug auf einen einzelnen Läufer, der durch ein Ereignis ausgelöst wird. Es ist eine Anwendung (wie der Befehl watchmedo shell-command
). Wenn wir unterschiedliche Aktionen für unterschiedliche Ereignisse haben wollten, von denen einige möglicherweise parallel ablaufen, wäre es ein Fehler, die Ereignisse herauszufiltern, die zeitlich nahe liegen. Das Problem liegt jedoch nicht in der Bibliothek watchdog
, sondern in watchmedo
.
Ich hatte das gleiche Problem und eine schnelle Problemumgehung bestand darin, flock -n test.lock CMD
zu verwenden, um sicherzustellen, dass der Prozess nur einmal ausgeführt werden konnte
Hilfreichster Kommentar
Ich hatte das gleiche Problem und eine schnelle Problemumgehung bestand darin,
flock -n test.lock CMD
zu verwenden, um sicherzustellen, dass der Prozess nur einmal ausgeführt werden konnte