0

我正在使用 NFS 来允许两台服务器通过简单的文本文件进行通信,但是有时读取文本文件以获取信息的服务器似乎正在读取不完整的文件,然后因为这个崩溃。然后我去看看导致它崩溃的“不完整”文件,文件是完整的。读取这些文件的服务器是否有可能在 NFS 完成写入之前看到它们?我仅在完全写入时才使用 linuxmv将它们从本地计算机移动到 NFS,因此“不应该”在 NFS 上存在不完整的状态。

这个问题可能与同步与异步有关吗?现在我正在使用异步。根据我的理解,异步只是意味着您从写入中返回并且您的程序可以继续运行,并且此写入将在以后发生。而同步意味着您的进程将等待该写入完成,然后再继续。更改为同步可以解决此问题吗?或者有没有更好的方法来处理这个?我知道两台服务器可以通过数据库进行通信,但实际上我这样做是为了降低数据库的使用率。谢谢!

4

1 回答 1

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

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

于 2012-11-15T11:05:45.343 回答