Watchdog: watchmedo обнаруживает изменение файла, но выполняет команду дважды

Созданный на 3 мая 2018  ·  3Комментарии  ·  Источник: gorakhargosh/watchdog

Привет,

Я пробую этот простой пример:

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

что работает довольно хорошо: когда в текущем каталоге создается .bin, copytoserver.bat выполняется ДВАЖДЫ, а не только ОДИН РАЗ

Это проблема или я чего-то упускаю в поисках хороших аргументов?

Спасибо за помощь

Жиль

Самый полезный комментарий

У меня была та же проблема, и быстрое решение заключалось в использовании flock -n test.lock CMD чтобы убедиться, что процесс может запускаться только один раз.

Все 3 Комментарий

Действительно, это происходит.

В Linux простой touch filename будет выдавать 2 сообщения: создание файла и изменение файла, если файл не существует. Вероятно, то же самое происходит в Windows, и поэтому он запускается дважды, а не один раз.

Сохранение здесь vim с произвольным запуском 11 раз. Вероятно, это потому, что это включает удаление файлов, создание временных файлов и переименование.

Наверное, было бы лучше разделить этот проект на 2 части: библиотеку ( watchdog ) и приложение оболочки ( watchmedo ). Я не знаю, сколько пользователей полагается на оба, но, возможно, фильтрация событий не должна быть одинаковой на обоих, и это может стать бременем для обслуживания.

Я исправил эту проблему с дозировкой , добавив одного бегуна с «противодействием», который:

  • Ожидает 10 мс перед запуском запущенного задания
  • Игнорирует новые события в течение следующих 50 мс $
  • Убивает / перезапускает задание, когда после этого наступает новое событие $ 50 мс $

На самом деле, это было настолько быстро, что раньше в Linux нарушалось наблюдение из-за странного события, происходящего в удаленном каталоге, поэтому я исправил его в апстриме.

Но это проблема, связанная с одним бегуном, запущенным событием. Это приложение (например, команда watchmedo shell-command ). Если бы мы хотели иметь отдельные действия для разных событий, причем некоторые из них, возможно, выполнялись бы параллельно, фильтрация событий, которые оказались близкими по времени, было бы ошибкой. Тем не менее, проблема не в библиотеке watchdog , а в watchmedo .

У меня была та же проблема, и быстрое решение заключалось в использовании flock -n test.lock CMD чтобы убедиться, что процесс может запускаться только один раз.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги