3

我有一个程序在 NFS 的多台机器上运行,我想将它们的所有输出记录到一个文件中。我可以只./my_program >> filename在每台机器上运行,还是我应该注意并发问题?由于我只是追加,我认为不会有问题,但我只是想确保。

4

2 回答 2

3

这可能有效,但是是的,您会遇到并发问题,并且日志文件基本上无法辨认。

我建议每台机器都有一个日志文件,然后定期(比如每晚)将文件与机器名连接起来作为文件名:

for i in "/path/to/logfiles/*"; do
    echo "Machine: $i";
    cat $i;
done > filename.log

我想这应该会给你一些想法。

于 2010-04-26T05:05:08.060 回答
2

NFS 协议不支持原子追加写入,因此对于任何平台,追加写入在 NFS 上绝不是原子的。如果您尝试,文件最终会损坏。

当从多个线程或进程追加到文件时,对该文件的 fwrite 是原子的,条件是文件以追加模式打开,写入它的字符串不超过文件系统块大小并且文件系统是本地的。在 NFS 中并非如此。

有一个解决方法,虽然我不知道如何从 shellscript 中做到这一点。该技术称为接近打开缓存一致性

于 2010-09-29T16:01:22.637 回答