Inotifywait записывает события журнала последовательно и делает что-то в зависимости от события - PullRequest
0 голосов
/ 17 января 2020

Всем заинтересованным знаком этот простой и превосходный инструмент для мониторинга изменений файлов, например / var / www/html/uploads/

inotifywait -m /var/www/html/uploads/ -e create -e access |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
        # do something with the file
    done

В моем случае по умолчанию выполняются два фактических действия (пожалуйста, следуйте логике c)

  • first - файл перемещен в / var / www/html/uploads/
  • second - этот файл открыт для изменения атрибута доступа

Разница в том, - это может быть НОВЫЙ файл - или ЖЕ файл с тем же именем файла.

Легко подражать на месте.

Так что я столкнулся со странной проблемой с сообщениями журнала от inotifywait.

Существует 2 сценария ios

  • ПЕРВЫЙ сценарий - файл ранее не существовал в / var / www/html/uploads/ - поэтому inotifywait должен в первую очередь регистрировать событие «создания»
  • ВТОРОЙ сценарий - тот же файл с тем же именем перезаписывается в / var / www/html/uploads/ и открывается - поэтому inotifywait должен регистрировать только событие "access"

Но проблема в том, что - inotifywait просто пишет изменения, относящиеся к «доступу»!

Неважно - NEW файл возник в / var / www/html/uploads/ и открылся, или существующий файл с тем же именем возник в / var / www/html/uploads/ и открылся - в любом случае журнал inotifywait ТОЛЬКО (!)

The file '31961987.zip' appeared in directory '/var/www/html/uploads/' via 'ACCESS'

На мой взгляд - inotifywait с двумя сценариями ios выше и кодом монитора, как указано выше, должен записывать журнал следующим образом

для НОВОГО имени файла две записи должны быть как

The file '31961987.zip' appeared in directory '/var/www/html/uploads/' via 'CREATE'
The file '31961987.zip' appeared in directory '/var/www/html/uploads/' via 'ACCESS'

для ТОГО ЖЕ файла, запись журнала должна быть только

The file '31961987.zip' appeared in directory '/var/www/html/uploads/' via 'ACCESS'

Но, как уже было сказано выше - в журнале inotifywait только одно событие

The file '31961987.zip' appeared in directory '/var/www/html/uploads/' via 'ACCESS'

Для меня это похоже на ошибку logi c для inotifywait.

Май Будь я не прав - но если кто-то понимает логику c inotifywait - пожалуйста, намекните

  • Сценарий монитора (как указано выше) неправильно писать события журнала последовательно «как они на самом деле происходят»?
  • где написать о проблеме для inotifywait (если вы согласны, что это ошибка logi c)?

Представьте, что вам нужно выполнить ДВА различных действия в зависимости от статус файла

  • , если файл в разделе "cre" "событие" - одно действие
  • , но если файл находится под событием "доступ" - другое действие

Есть идеи, как его реализовать в Linux и inotifywait?

Давайте обсудим,

...