filesystems – 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

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

host-A% 

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

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

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

最佳答案
默认情况下,大多数NFS客户端缓存目录信息60秒.

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

转载注明原文:filesystems – NFS – 以编程方式检测远程创建的文件? - 代码日志