在多个主机上并行执行不同的命令

我正在寻找一个工具来运行一系列命令,如现有的工具:

parallel -h parallel [OPTIONS] command -- arguments for each argument, run command with argument, in parallel parallel [OPTIONS] -- commands run specified commands in parallel 

但是我希望这些命令可以在多台计算机上通过ssh运行,并且可以使用psshpdsh的许多优点与许多主机进行通信。 我已经破解了一些有用的东西 ,但是与这些工具相比,ssh处理没有任何意义 – 我无法阻止它们,甚至看不到它们的所有输出。

更好的是,如果该工具有一些基本的负载平衡,但我想我会使用一个单独的工具来select主机。 (一个查询负载,内存的好工具,如果一台计算机在交互式使用也将不胜感激,但我已经写了一些东西,足以让主机select。)这不是在一个集群,我不'除了sshd以外,还要依赖守护进程,或者要求pipe理员安装像Condor这样严肃的集群作业调度程序。 我没有任何这些计算机的根访问权限。

编辑:为了强调,我想在每个主机上运行不同的命令 – 通常使用不同的参数运行相同的程序,就像上面的第一个parallel使用示例一样。

啊! 它看起来像GNU版本的并行 (不是我已经安装的)做这个。 没有负载平衡,我还没有尝试过,看看它与每个stdout和stderr,但这正是我想要的。

 To run commands on more than one remote computer run: seq 10 | parallel --sshlogin server.example.com,server2.example.net echo 

不幸的是,我写了一个脚本,给出了状态更新,具有可configuration的输出设置,并合并了一些简单的负载平衡,所以我现在将坚持下去。

Blockquote编辑:为了强调,我想在每个主机上运行不同的命令。 大段引用

如果你想要不同的命令在哪里是平行的部分? 并行意味着在一组主机(并行运行)上启动相同的命令…如果你想在不同的主机上做不同的事情,这是一个连续的过程

你真的应该看看那里的许多集群技术之一。 试着看看Apache Hadoop 。 我最近阅读了一篇很棒的文章,您可能会对这个主题感兴趣,关于设置一个10,000核心群集来进行并行计算: http : //goo.gl/A8hgX

我已经使用mussh,这是基于bash,但并行运行。 我很高兴。

我也曾经在本地的Linuxfests上看到了一些rshall(尽pipe在本地使用ssh的情况下持有RSH)的谈判,它基于perl,可以使用外部来源查询主机列表,但是它期望某些特定的主机信息格式。

这些都没有排队或工作安排,虽然你可以运行他们通过cron或如果你想。

这些都不需要root访问权限,但是它们确实要求您具有基于密钥的身份validation。

clusterssh是另一个值得研究的工具。 它更具互动性,因为它将打开并为每个主机平铺terminal窗口。 您也可以在每个terminal中分别运行命令或一次运行所有(或某些)命令。 例如,一次运行12个系统的top ,然后在其中一个进程中追踪一个进程。