是否可以同时在多个节点上启动一个命令?

是否可以同时在多个节点上启动一个命令?

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

相关内容