У меня есть скрипт 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.