Может ли любой linux API или инструмент наблюдать за любыми изменениями в любой папке ниже, например / SharedRoot или мне нужно настроить, например, Inotify для каждой папки? - PullRequest
2 голосов
/ 11 мая 2010

У меня есть папка с ~ 10 000 подпапок.

Может ли любой linux API или инструмент отслеживать любые изменения в любой папке ниже, например / SharedRoot, или мне нужно настроить inotify для каждой папки?(т.е. я проигрываю, если хочу сделать это для 10k + папок).Наверное, да, так как я уже видел примеры этого неэффективного метода, например http://twistedmatrix.com/trac/browser/trunk/twisted/internet/inotify.py?rev=28866#L345

Моя проблема:
Мне нужно сохранять папки отсортированными по времени с последним активным "проектом" вверх.

При изменении файла каждая папка над этим файлом должна обновлять свою последнюю измененную метку времени, чтобы соответствовать файлу.Задержки в порядке.Открыв файл (обычно MS Excel) и закрыв его снова, дата его файла может прыгать вверх, а затем снова вниз.По этой причине мне нужно подождать, пока файл не будет закрыт, затем поставить в очередь папку этого файла для проверки, и только спустя некоторое время я пойду и найду самый новый файл в его папке, так как дата файла запускающего файла можетуже быть задним числом к ​​исходной отметке времени в Excel или аналогичных программах.Кроме того, в случае использования / создания нескольких файлов из одной и той же папки имеет смысл буферизовать метки времени родителей этих папок, чтобы хотя бы свести кучу обновлений в одно отложенное обновление.

Я ищурешение Linux.У меня есть некоторый код, который можно запустить на сервере Windows, большинство функций очереди здесь: http://github.com/sesam/FolderdateFollowsFiles/blob/master/FolderdateFollowsFiles/Follower.vb

Доступный API: s
Относительно inotify на окнах, ReadDirectoryChangesW, может просматривать папкуи все его поддерево;см. bWatchSubtree на http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx

Samba?
Возможно ли исправление источника samba, но, возможно, уже есть доступные хуки?Другие возможности, например, на стороне клиента (различные версии Windows) и слежка за действиями с файлами для рекурсивного обновления папок?

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Я видел, что вы управляете этими деревьями под общим ресурсом Samba. Возможно, вы можете использовать модуль VFS для сканирования на вирусы ClamAV, чтобы узнать, как они запускают «сканирование при закрытии».

Samba Howto: наращиваемые модули VFS

Должно быть довольно просто проверить время закрытого файла и изменить путь к каталогу, ведущему к нему, без каких-либо издержек производительности / памяти, связанных с inotify и др.

Просто мысль.

1 голос
/ 21 мая 2010

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

Процесс (аналогичный тому, как это делает Beagle) довольно прост:

  1. Установить часы на корневом узле.
  2. Выполнить поиск в ширину (не глубина сначала ), начиная с корневого узла
  3. Устанавливать часы по каталогам, в порядке поиска.
  4. Следите за событиями создания каталогов, продолжайте добавлять, как они делают. Пересортируйте свой список, как это происходит.

Поиск в ширину важен, в противном случае вы можете пропустить некоторые вещи из-за гонки, когда вы запускаете, и того, что делают клиенты корневого узла.

См. этот вопрос , в котором также упоминается этот запрос . У меня была та же самая проблема, с которой вы столкнулись.

По сути, один поток продолжает следить за событиями создания каталогов, добавляя новые наблюдения в новые каталоги практически одновременно с их созданием. Что-то еще сортирует список по требованию или после того, как поток inotify снимает свою блокировку.

Я пытался использовать версии без блокировок выше, но с .. сомнительным .. success:)

...