NFS-以编程方式检测远程创建的文件?

NFS-以编程方式检测远程创建的文件?

我正在尝试监视 NFS 共享并检测远程系统上运行的进程是否创建了文件。问题是,在创建文件后检测不起作用,我的脚本仍然认为没有文件。如果有人在目录中执行 ls,或者我运行一个单独的进程,该进程只是在后台定期执行 ls,那么脚本将检测到该文件存在。但是,将“ls 目录”功能添加到主脚本中不起作用:它仍然永远不会检测到文件的存在,直到外部进程以某种方式导致目录列表内容被刷新。

这是一个说明该问题的测试用例:

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%

是否有人知道一个简单的修复或解决方法,比每 10 秒在后台运行一个脚本来 ls NFS 目录更不俗气?

答案1

默认情况下,大多数 NFS 客户端会缓存目录信息 60 秒。

在客户端上安装 NFS 共享,并选择noac禁用属性缓存,或acdirmin=0,acdirmax=0仅禁用目录缓存。

相关内容