通过SSH从多个远程主机收集STDOUT时的数据完整性问题

时间:2010-08-09 23:55:16

标签: linux ssh buffer stdout data-integrity

假设您运行以下命令:

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

这样每个主机的stdout都不适合单个缓冲区?请问数据 文件的完整性[1-3] .txt,而不是订单,在这种情况下是否保持?是 有可能某个其他文件的文件片段在中间滑动 像这样的其他文件?

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

1 个答案:

答案 0 :(得分:2)

我想说发生这种情况的可能性几乎是100%;-)假设通过网络将cat一个文件花费的时间很长。

数据将以与接收顺序大致相同的顺序写入本地系统上的/tmp/output。在#1中断之前,shell不知道要保留来自ssh命令#2或#3的数据,此外,它不知道文件1的每次迭代结束的位置。