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

Dan*_*Voe 6 filesystems 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);
}
Run Code Online (Sandbox Code Playgroud)

在“host-A”上运行这个简单的脚本:

host-A% ./watch_file.pl &
[1] 9312
Run Code Online (Sandbox Code Playgroud)

移至“host-B”并创建文件:

host-B% touch /nfs/test
Run Code Online (Sandbox Code Playgroud)

...回到“host-A”,程序还没有退出:

host-A% 
Run Code Online (Sandbox Code Playgroud)

...仍然在“host-A”上,在目录中执行 ls ,然后脚本看到该文件:

host-A% ls -a /nfs
.  ..  test
host-A%
[1]+  Done                    ./watch_file.pl &
host-A%
Run Code Online (Sandbox Code Playgroud)

有没有人知道一个简单的修复或解决方法,这比每 10 秒在后台运行一个脚本来 ls NFS 目录要少?

Hyp*_*ppy 6

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

noac使用禁用属性缓存的选项在客户端上挂载 NFS 共享,或用于acdirmin=0,acdirmax=0仅禁用目录缓存。