NFS – 以编程方式检测远程创build的文件?

我试图监视一个NFS共享,并检测远程系统上运行的进程创build的文件。 问题是在文件创build后检测不起作用,我的脚本仍然认为没有文件。 如果有人在目录中执行ls,或者我运行了一个单独的进程,只是在后台周期性执行,则脚本会检测到文件存在。 但是,将“ls the directory”function添加到主脚本中并不起作用:在外部进程导致目录列表内容以某种方式刷新之前,它仍然不会启动文件的存在。

这里有一个testing案例来说明这个问题:

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”并创build文件:

 host-B% touch /nfs/test 

…回到“主机-A”,程序还没有退出:

 host-A% 

…仍然在“host-A”上,在目录中做一个ls,然后脚本看到这个文件:

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

有没有人知道一个简单的修复或解决方法,这将比在后台运行一个脚本每隔10秒ls的NFS目录将不那么hokey?

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

使用noac选项挂载客户端上的NFS共享以禁用属性caching,或者使用acdirmin=0,acdirmax=0来禁用目录caching。