收集从通过SSH多个远程主机STDOUTs时的数据完整性问题(Data integrity ques

2019-10-29 08:37发布

假设你运行下面的命令:

ssh $host1 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' > /tmp/output
ssh $host2 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' >> /tmp/output
ssh $host3 'while [ 1 ]; do sleep 1; echo "Hello from $HOSTNAME"; done' >> /tmp/output

然后输出将如下所示:

Hello from host1
Hello from host2
Hello from host3
Hello from host1
...

但如果我把它改成

ssh $host1 'while [ 1 ]; do sleep 1; cat /some/large/file1.txt; done' > /tmp/output
ssh $host2 'while [ 1 ]; do sleep 1; cat /some/large/file2.txt; done' >> /tmp/output
ssh $host3 'while [ 1 ]; do sleep 1; cat /some/large/file3.txt; done' >> /tmp/output

所以从每个主机标准输出将不适合到一个单一的缓冲区? 将文件[1-3]。txt文件,而不是顺序的数据的完整性,在这种情况下被保持? 是否有一些其他的文件的文件片段在这样的一些其他文件的中间滑落的可能性?

[file1_fragment1] [file2_fragment1] [file1_fragment2] [file1_fragment3] [file3_fragment1] ...

Answer 1:

我会说,事情发生的可能性几乎100%;-)假设带到时间cat一个文件在网络上很长。

该数据将被写入到/tmp/output在大致相同的顺序,它被接收在本地系统上。 外壳不知道坚持到来自SSH命令#2或#3,直到有一个在1号休息,而且,它不知道在哪里文件1的每个迭代结束来的数据。



文章来源: Data integrity question when collecting STDOUTs from multiple remote hosts over SSH