我怎样才能向具有不同参数的远程节点发出并行命令?

我需要在多台Ubuntu-Linux服务器上并行执行一个应用程序,同时为不同的服务器提供不同的参数。 我试图谷歌它,但不能得到可能的解决scheme。 我甚至尝试过使用ssh / pdsh / parallel,但没有成功。

为了进一步解释场景,下面是一个不起作用的例子(带有pdsh),其中script.sh应该在所有3台服务器上并行执行,但是参数不同。 仅供参考,我已经有了公共/专用ssh-key(无密码login)。

$ pdsh -w server1,server2,server3 -l username script.sh args
其中参数server1为1,server2为2等。

我将不胜感激,如果有人可以帮助我实现这一目标,无论是使用pdsh或Ubuntu中提供的其他工具。 谢谢你的帮助。

问候
萨钦

我过去用cssh做过类似的事情,但是我不明白为什么pdsh不能用同样的方法工作(尽管我从来没有用过)。

我的假设是你有一个交互式会话在所有系统上同时运行, 并且你能够在每个会话中创建新的环境变量。 如果pdsh不允许, cssh

在启动脚本之前,根据主机名设置一个环境变量。

 ARG=$( case $(hostname) in server1) echo 1;; server2) echo 2;; server3) echo 3;; esac ) script.sh $ARG 

假设你想要的编号是用你的主机名编码的(正如你的问题所建议的那样),你可以像这样简化它:

 script.sh ${HOSTNAME#server} 

你不需要任何特殊的工具 – ssh和bash就足够了。 如果你想添加更多的服务器,你只需要把它们添加到顶部附近的数组中即可。 请小心下面示例代码中的空格。 如果您有多个参数,请使用多个参数数组。 一个ssh配置文件允许每个主机的用户名。

 `#!/bin/bash servers=( server1 server2 server3 ) args=( args1 args2 args3 ) count=${#servers[@]} k=0 while ((k<count)) do ssh -l username ${servers[k]} 'script ${args[k]}' & ((k++)) done`