是否可以同时在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 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