複数のサーバーでの sh スクリプトの並列実行

複数のサーバーでの sh スクリプトの並列実行

ループ内の複数のサーバーでアクションを実行しようとしていますが、最初のサーバーでアクションを起動し、最初のサーバーが完了するのを待たずに 2 番目のサーバーに直接移動したいと考えています。

HOSTS="host1 host2"
    For hostname in ${HOST} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done 

Linux sh bash でこれをどうやって行うか知っている人はいますか?

よろしくお願いします。

答え1

pdshあなたのニーズを満たすと思われます。マルチスレッド方式で、SSH 接続を並列に実行します。

例:

$ pdsh -w 192.168.1.4,192.168.1.250 uname -r
192.168.1.4: 2.6.32-431.17.1.el6.x86_64
192.168.1.250: 2.6.32-431.11.2.el6.x86_64
$

pdsh を使用した並列シェル

単一のファイルを複数のリモート サイトに同時に送信するにはどうすればよいですか?

答え2

GNU Parallel を使用する:

parallel -S host1,host2 --nonall uname -a

タスクがより複雑な場合は、関数を作成します。

do_actions() {
   action
   packed
   function
}
export -f do_actions
HOSTS="host1,host2"
parallel -S $HOSTS --ssh 'ssh -l '$USERNAME --nonall --env do_actions do_actions

ユーザー名が同じ場合は、whoamiこれで十分です。

parallel -S $HOSTS --nonall --env do_actions do_actions

GNU Parallel はグローバルにインストールする必要はありません。インストールされていない場合は、個人インストールを行うことができます。

wget pi.dk/3
bash 3

関連情報