在多个服务器中并行执行sh脚本

在多个服务器中并行执行sh脚本

我正在尝试在循环中的多个服务器中执行操作,但我想在第一个服务器中启动我的操作并直接转到第二个服务器,而无需等待第一个服务器完成。

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 的并行 shell

如何同时将单个文件发送到多个远程站点?

答案2

使用 GNU 并行:

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

相关内容