我基本上有一个用于网站的网络服务器和另一个仅存储文件的网络服务器。文件服务器通过安装其目录之一连接到主服务器。该网站运行 Django,所以我主要处理 python。不管怎样,我似乎遇到了一些问题,文件被报告为不存在,即使它们实际上存在。
基本上当我打电话时
filepath = '/path/to/file/on/nfs/share'
exists = os.path.exists(filepath)
exists即使该文件确实存在,也是 false,并且我知道它确实存在,因为我已将时间戳打印到日志文件中,该日志文件准确显示了它的创建时间。我不确定可能是什么问题,但我知道 os.path.exists 的文档说
在某些平台上,如果未授予对请求的文件执行 os.stat() 的权限,则此函数可能会返回 False,即使路径实际存在。
我知道情况并非如此,因为这些文件共享相同的组和组号,并且在两台服务器上也共享相同的组号。它可能是一个陈旧的缓存或类似的东西吗?
我的安装是通过 fstab 自动完成的。
Client side, the settings are:
filehost:/filefolder /localfolder nfs defaults,rsize=32768,wsize=32768
Server side, the settings are:
/filefolder webserver(rw,sync,no_root_squash,no_subtree_check)
Edit:
所以,我想了解更多信息/细节。我正在运行一个 Python 子进程,它在远程目录中生成一个文件。当发出请求时,它启动子进程并返回文件的预期位置。
在前端,有一个被 ping 的 url,它为该文件调用 os.path.exists() ,当它执行时,然后通过 ajax 加载资源。
怀疑的问题是,有时此 pinger 会报告文件在实际可用后几秒钟内不可用。这也是我认为可能是陈旧缓存存在问题的原因。
所有文件和其中的目录都是所有者/组 www-data,以及由 django 实例化的任何子进程。而且这个问题似乎并不完全可重复。有时它会很快起作用,而另一些则需要比预期多几秒钟的时间