我有一个使用NFS在多台计算机上运行的程序,我想将所有输出记录到一个文件中。我可以在每台机器上运行./my_program >> filename
,还是我应该注意并发问题?由于我只是附加,我不认为会有问题,但我只是想确保。
答案 0 :(得分:3)
这可行,但是,你会遇到并发问题,日志文件基本上是无法解读的。
我建议每台机器都有一个日志文件,然后定期(比如每晚),将文件与机器名称连接在一起作为文件名:
for i in "/path/to/logfiles/*"; do
echo "Machine: $i";
cat $i;
done > filename.log
我认为这应该会给你一些想法。
答案 1 :(得分:2)
NFS协议不支持原子追加写入,因此对于任何平台,追加写入在NFS上永远不是原子的。如果你尝试,文件将最终损坏。
当附加到多个线程或进程的文件时,在以附加模式打开文件的情况下,写入该文件的文件是原子的,写入它的字符串不超过文件系统blocksize,文件系统是本地的。在NFS中并非如此。
有一种解决方法,虽然我不知道如何从一个shellcript中做到这一点。该技术称为close-to-open cache consistency