ループ内の複数のサーバーでアクションを実行しようとしていますが、最初のサーバーでアクションを起動し、最初のサーバーが完了するのを待たずに、2番目のサーバーに直接移動したいと思います。
HOSTS="Host1 Host2"
For hostname in ${Host} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done
誰もがLinuxのshbashでそれを行うためのアイデアを持っていますか?
前もって感謝します。
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
$
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