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