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

NFS - обнаружение удаленно созданных файлов программным способом?

Я пытаюсь отслеживать общий ресурс NFS и обнаруживать создание файла процессом, запущенным в удаленной системе. Проблема в том, что обнаружение не работает после создания файла, мой сценарий по-прежнему считает, что файла нет. Если кто-то выполняет ls в каталоге или я запускаю отдельный процесс, который просто периодически выполняет ls в фоновом режиме, скрипт ТОГДА обнаружит, что файл существует. Однако добавление функции «ls the directory» в основной скрипт не работает: он по-прежнему никогда не определяет существование файла, пока внешний процесс не заставит каким-то образом обновить содержимое списка каталогов.

Вот тестовый пример, иллюстрирующий проблему:

watch_file.pl:

#!/usr/bin/perl -w
my @stat;
while (1) {
    @stat = stat("/nfs/test");
    last if ($stat[1] && $stat[1] > 0);
}

Запустите этот простой скрипт на "host-A":

host-A% ./watch_file.pl &
[1] 9312

Перейдите на "host-B" и создайте файл:

host-B% touch /nfs/test

... вернуться к "host-A", программа еще не завершилась:

host-A% 

... все еще на "host-A", выполните команду ls в каталоге, тогда скрипт увидит файл:

host-A% ls -a /nfs
.  ..  test
host-A%
[1]+  Done                    ./watch_file.pl &
host-A%

Кто-нибудь знает простое исправление или обходной путь для этого, который был бы менее хитрым, чем запуск скрипта в фоновом режиме для ls каталога NFS каждые 10 секунд?

По умолчанию большинство клиентов NFS кэшируют информацию о каталоге в течение 60 секунд.

Смонтируйте общий ресурс NFS на клиенте с noac возможность отключить кеширование атрибутов или использовать acdirmin=0,acdirmax=0 просто отключить кеширование каталогов.