Watchdog: watchmedo erkennt Dateiänderungen, führt den Befehl jedoch zweimal aus

Erstellt am 3. Mai 2018  ·  3Kommentare  ·  Quelle: gorakhargosh/watchdog

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

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

Alle 3 Kommentare

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:

  • Wartet $10 ms$, bevor der ausgelöste Job gestartet wird
  • Ignoriert neue Ereignisse während der nächsten 50 ms$
  • Beendet/startet den Job neu, wenn ein neues Ereignis danach eintritt $50 ms$

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen