设想:
我们正在使用 NFS 共享来允许客户上传原始视频材料。然后从 (NFS) 服务器上的目录轮询文件以便进行处理。由于我们不想处理尚未完成上传的文件,因此我想在服务器端脚本(Bash)中确定该文件是否仍在使用中。
由于该男子页说,双方fuser
并lsof -N
应允许对NFS共享检测正在使用的文件。但是,我没有“看到”服务器上正在使用的文件,这会导致稍后处理中的文件损坏。
设置:
我的 NFS/etc/exports
包含这些设置(UID 和 GID 是服务器上共享目录的所有者,换行以便更好地显示):
/export/foo 10.3.2.0/255.255.255.0
(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
Run Code Online (Sandbox Code Playgroud)
客户端使用以下命令挂载此共享:
10.3.2.197:/export/foo /data002/ nfs defaults 0 0
Run Code Online (Sandbox Code Playgroud)
服务器是使用“nfs-kernel-server 1:1.2.0-4ubuntu4”的 Ubuntu 10.04,客户端是 SLES 10 SP2
当我在客户端(在共享目录内)打开一个文件时,使用
echo "Hello" > test.txt && tail -f foo.txt
Run Code Online (Sandbox Code Playgroud)
然后检查(仍在客户端上)文件是否正在使用中
fuser foo.txt
Run Code Online (Sandbox Code Playgroud)
我可以看到该文件正在使用中。但是,在服务器端(fuser foo.txt
和lsof -N | grep foo.txt
)检查时,我没有得到任何使用信息。
如果当前正在使用 NFS 共享上的文件(无论是本地还是远程),我如何检查服务器?或者我在当前的设置中做错了什么?