10台のサーバーのIPアドレスを含むファイルがあります。例えばhost.txt
1つのサーバーから10の異なるサーバーにあるディレクトリを圧縮したいと思います。
実行時間を短縮するためにこれらのサーバーと並列にSSHを実行する方法
以下のコードを試しましたが、運がありません。
cat host.txt |
while read i
do
ssh -qn $i 'tar -cvf /tmp/TC.tar.gz /etc' &
done
期待する:
PSSHを使用せずにサーバーでtarコマンドが並列に実行されるように、10台のサーバーでSSHを並列化しようとしています。
答え1
クラスターの使用:https://sourceforge.net/projects/clusterssh/
コマンドを並列に実行するには、次のように使用できます。
cssh user@client1 user@client2
これにより、各クライアントの端末ウィンドウと、すべての端末で同時にコマンドを入力できるコマンドウィンドウが表示されます。
~/.clusterssh ディレクトリにはさまざまなオプションを設定できるため、クライアントをタグごとに簡単にグループ化できます。
バンドルクライアントからダウンロードするには、host.txt
ファイルは~/.clusterssh/tags
次のようになります。
root@host1 tar update
root@host2 tar update
root@host3 tar test
root@host4 update test
root@host5 update test
このようにして、tar、update、およびtestタグを定義できます。このタグをtar
使用すると、を実行して最初の3つのホストでClustershを実行できますcssh tar
。
インターネットを検索するclusterssh
と便利なドキュメントがたくさん見つかります。
apt-get install clusterssh
ほとんどのLinuxディストリビューションにはClustershが含まれているため、次の方法で簡単にインストールできます。
編集する:
次のオプションを使用して、実行するコマンドをClustershに追加できます-a
。
cssh tar -a "tar -cvf /tmp/TC.tar.gz /etc"
また、SSH公開/秘密鍵を使用すると、常にパスワードを入力する必要はありません。