例如,我正在perl中做这个操作,但仍然不能很好地工作,特别是在Mac机器上。
write_key_file(); # write a file that must be checked before proceeding
以下检查在文件存在时无法始终返回true
问题 - 在NFS系统中,此Perl命令未返回正确的状态:
if( -e $file){}
听到一个没有用的解决方案:
sleep(5); # wait 5 seconds
system("ls -ltr"); # force to cache?
if(-e $file){}
我不打算像这样检查每个文件,但有一些关键位置需要获取正确的文件状态。
我们有更好的方法来强制刷新特定目录中特定文件的nfs缓存吗?谢谢。
我不确定这是否是一个XY问题,但有一些最薄弱的点都可以成为解决方案。
A -- NFS客户端设置
如果此阶段有解决方案,那就太好了!
B -- 写入函数的退出代码或返回代码
$exit_code = write_key_file();
它的问题在于,不是所有的写入都在代码块的范围内。这只解决了部分问题。
C -- 禁用 NFS 缓存以进行文件检查的特定文件或目录
我需要确保这是否可行以及如何操作?如果不行,原因是什么?
我对所有可能的解决方案开放,没有解决方案或其他可能性。
sysopen
和O_RDWR|O_CREAT|O_EXCL
强制刷新NFS缓存 - 如果文件不存在,则调用成功(但并非所有的NFS实现都正确处理O_EXCL)。我在Python中使用了这种技术(我不会Perl)。请参见我的回答http://stackoverflow.com/questions/29979624/can-i-prevent-a-script-from-launching-twice-using-open2-with-o-creat-and-flock/29986073#29986073。 - Dan Cornilescu