我正在尝试监视 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 目录要少?