2012-11-15 144 views
0

我使用的NFS允许两台服务器两个通过简单的文本文件进行通信,但有时似乎读取文本文件获取信息的服务器读取不完整的文件,然后因此崩溃。然后我去查看使其崩溃的“不完整”文件,并且文件已完成。读取这些文件的服务器是否有可能在NFS完成写入之前看到它们?我只使用linux的mv将它们从本地计算机移到NFS,只有它们完全写入时,才能在NFS上“不应该”为不完整状态。NFS同步与异步

这个问题可能与同步vs异步有关吗?现在我正在使用异步。根据我的理解,异步意味着你从写入返回并且你的程序可以继续运行,并且此写入将在稍后发生。鉴于同步意味着您的流程将在继续前继续等待写入。会改变同步解决这个问题吗?还是有更好的方法来处理这个问题?我知道两台服务器可以通过数据库进行通信,但我实际上是这样做的,以尽量减少数据库的使用。谢谢!

回答

1

mv跨文件系统转换为cp + rm并且当然不是原子的,即使没有涉及NFS也是如此。您应该先将文件复制到目标文件系统中的临时文件,然后将其重命名为正确的名称。例如,而不是:

$ mv myfile.txt /mnt/targetfs/myfile.txt 

做:

$ mv myfile.txt /mnt/targetfs/.myfile.txt.tmp 
$ mv /mnt/targetfs/.myfile.txt.tmp /mnt/targetfs/myfile.txt 

(这里假定进程读取文件忽略它,而它没有正确的名称)

+0

对不起,我没在我的描述中没有提到这一点,但这实际上是我已经做的,而且我仍然在解决这个问题。 – srchulo