在多個伺服器中並行執行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

相關內容