代码之家  ›  专栏  ›  技术社区  ›  OTZ

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

  •  0
  • OTZ  · 技术社区  · 15 年前

    假设您运行以下命令:

    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] ...
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   David Z    15 年前

    我想说发生这种情况的可能性几乎是100%;—)假设 cat 网络上的一个文件很长。

    /tmp/output 在本地系统上,其接收顺序大致相同。shell不知道如何保存来自ssh命令2或3的数据,直到在1中出现中断,而且它也不知道文件1的每次迭代的结束在哪里。

    推荐文章