Назад | Перейти на главную страницу

Inotify / iwatch не может видеть, когда одновременно создается больше файлов

Мне понадобится сценарий, который может проверять файлы, когда они загружаются / создаются на сервере.

Я написал сценарий, который проверяет, но я бы хотел, чтобы он запускался при возникновении события создания. Я пробовал это с iwatch, затем с inotify, но у меня возникла проблема: если одновременно копируется больше файлов, inotify / iwatch запускается только один или два раза, но не столько раз, сколько создается файлов.

Так, например, я бегу: while : ; do inotifywait --format '%f: %e' -e create /path/to/watch; done

И на другом терминале, но на том же сервере, конечно, я вхожу в каталог с большим количеством файлов в нем, и inotify только несколько раз уведомляет меня на другом терминале, но не все время, как должно.

Может кто-нибудь подсказать мне, что может вызвать такое?

Заранее спасибо.

Мне удалось выяснить, в чем проблема. Inotify / Iwatch мог видеть и передавать моему сценарию эти файлы, соответствующие заданным событиям, но когда сценарий начинал их обрабатывать, Inotify не сохранял файлы до завершения сценария, а через них.

Вот и сделал примитивный кеш. Сначала мой сценарий записывает файлы в текстовый файл в виде списка, а тем временем передает этот текстовый файл другому процессу (модулю моего сценария) для их обработки. И делает это с помощью '&', поэтому основной скрипт не ждет, пока модуль пройдёт по списку.

Есть отличный инструмент под названием lsyncd. Это для синхронизации, но я также использовал его для изменения разрешений для загруженного файла. Взгляни на пример.

Вы можете использовать его или просмотреть код, он использует inotify.

BR