将多个stdoutsredirect到单个文件

我有一个程序运行在多台机器上的NFS,我想把他们所有的输出logging到一个文件中。 我可以在每台机器上运行./my_program >> filename ,还是有一个并发问题,我应该知道吗? 由于我只是追加,我不认为会有问题,但我只是想确定。

这可以工作,但是,是的,你会遇到并发问题,日志文件基本上是无法解读的。

我会建议的是,每台机器都有一个日志文件,然后在某个定期的基础上(比如每晚),将这些文件连同机器名作为文件名一起连接起来:

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

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

NFS协议不支持原子追加写操作,因此对于任何平台,追加写操作在NFS上都不会原子化。 如果您尝试,文件将最终损坏。

当追加到多个线程或进程的文件时,在该文件以追加模式打开的情况下,该文件的fwrites是原子的,写入的字符串不超过文件系统块大小,文件系统是本地的。 在NFS中哪个不是这种情况。

有一个解决方法,虽然我不知道如何从一个shell脚本。 这种技术被称为关闭打开缓存一致性