0

次のコマンドを実行するとします。

ssh $host1 'while [1]; スリープ 1 を実行します。echo "$HOSTNAME からこんにちは"; 完了' > /tmp/output
ssh $host2 'while [1]; スリープ 1 を実行します。echo "$HOSTNAME からこんにちは"; 完了' >> /tmp/output
ssh $host3 'while [1]; スリープ 1 を実行します。echo "$HOSTNAME からこんにちは"; 完了' >> /tmp/output

出力は次のようになります。

host1 からこんにちは
host2 からこんにちは
host3 からこんにちは
host1 からこんにちは
...

しかし、私がそれを

ssh $host1 'while [1]; スリープ 1 を実行します。猫 /some/large/file1.txt; 完了' > /tmp/output
ssh $host2 'while [1]; スリープ 1 を実行します。猫 /some/large/file2.txt; 完了' >> /tmp/output
ssh $host3 'while [1]; スリープ 1 を実行します。猫/some/large/file3.txt; 完了' >> /tmp/output

各ホストからの stdout が単一のバッファに収まらないようにするには? この場合、順序ではなく file[1-3].txt のデータの整合性は維持されますか? このように、他のファイルのファイルの断片が他のファイルの途中でスリップする可能性はありますか?

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

1 に答える 1

2

その可能性はほぼ 100% です ;-)catネットワーク上で 1 つのファイルにかかる時間が長いと仮定します。

/tmp/outputデータは、受信した順序とほぼ同じ順序でローカル システムに書き込まれます。シェルは、#1 が壊れるまで、ssh コマンド #2 または #3 からのデータを保持することを認識しません。さらに、ファイル 1 の各反復の終わりがどこに来るかはわかりません。

于 2010-08-10T00:00:59.043 に答える