Скрипт inotifywait вызывает рекурсивный цикл

Скрипт inotifywait вызывает рекурсивный цикл

У меня есть скрипт inotifywait, который отслеживает каталог загрузки FTP-файлов и всякий раз, когда загружается новый файл, устанавливает правильные разрешения.

Я делаю это, потому что удаленный клиент принудительно устанавливает неправильные файловые режимы, а запрет FTP-серверу принимать команды chmod приводит к тому, что удаленный клиент выдает ложные ошибки.

поэтому мое последнее средство — скрипт inotify, но он вызывает еще одну проблему, вот она:

#!/bin/bash
inotifywait -mrq -e ATTRIB --format "%w%f" /home/user/upload/ | while read FILE; do 
  if [[ -f "$FILE" ]];then
    chown user:apache "$FILE" && chmod 640 "$FILE"
  fi
done

так что я предполагаю, что здесь пошло не так: как только файл загружен и chmod-применён клиентом, срабатывает опция ATTRIB (как и должно быть), но результирующий chmod в моём собственном скрипте снова вызывает срабатывание опции ATTRIB... вызывая рекурсивный цикл.

есть ли способ дать понять inotifywait, что он должен игнорировать свои собственные действия, предотвращая этот цикл?

решение1

Вместо того, чтобы inotifywaitждать -e attrib, вам следует ждать -e modify.

   modify
   A watched file or a file within a watched directory was written to.

   attrib
   The metadata of a watched file or a file within a watched directory was modified.  This includes timestamps,  file permissions, extended attributes etc.

Связанный контент