是否可以同時在多個節點上啟動命令?

是否可以同時在多個節點上啟動命令?

是否可以同時在10個節點上啟動指令?

這是我的腳本的一部分:

#! /bin/sh

nb_lignes=`wc -l $1 | cut -d " " -f1`
echo "$nb_lignes machines"

for i in $(seq $nb_lignes)
do
    machine=`head $1 -n $i | tail -1`
    ssh root@$machine -x "instruction"  

done

答案1

是的。該dsh命令準確地提供了您提到的內容。它將在參數指定的節點列表上運行相同的命令,您甚至可以解析 stdout 和 stderr 以獲取這些節點的任何答案。

為了使用它,我建議使用 SSH 金鑰身份驗證,以避免dsh命令提示輸入密碼。

有一個替代方案,稱為clusterssh.這是該命令的互動式版本dsh,因此每台電腦都會開啟一個帶有 shell 的迷你窗口,因此您可以在特定 shell 中輸入命令或為所有窗口輸入全域命令。

答案2

使用 GNU Parallel 看起來像這樣:

parallel --slf $1 --nonall instruction

它將為每個 CPU 產生一個作業。

GNU Parallel 是一個通用並行器,可以輕鬆地在同一台電腦或多台您可以透過 ssh 存取的電腦上並行運行作業。它通常可以代替for循環。

如果您想要在 4 個 CPU 上執行 32 個不同的作業,則並行化的直接方法是在每個 CPU 上執行 8 個作業:

簡單的調度

相反,GNU Parallel 在完成後會產生一個新進程 - 保持 CPU 處於活動狀態,從而節省時間:

GNU 平行調度

安裝

如果您的發行版未打包 GNU Parallel,您可以進行個人安裝,不需要 root 存取權。這樣做可以在 10 秒內完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

其他安裝選項,請參閱http://git.savannah.gnu.org/cgit/parallel.git/tree/README

了解更多

查看更多範例:http://www.gnu.org/software/parallel/man.html

觀看介紹影片:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

瀏覽本教學:http://www.gnu.org/software/parallel/parallel_tutorial.html

註冊電子郵件清單以獲得支援:https://lists.gnu.org/mailman/listinfo/parallel

相關內容