如何向具有不同参数的远程节点发出并行命令?

时间:2013-09-22 06:37:56

标签: linux ssh remote-server

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

为了进一步解释这个场景,这里有一个非工作的例子(带有pdsh),其中script.sh应该在所有3个服务器上并行执行,但具有不同的参数。仅供参考,我已经有公共/私人ssh-key(无密码登录)。

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

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

关心
萨钦

2 个答案:

答案 0 :(得分:1)

我过去使用cssh做了类似的事情,但我不明白为什么pdsh不会采用相同的方法(尽管我和#39} ;从未使用它)。

我的假设是您在所有系统上同时运行交互式会话您可以在每个会话中创建新的环境变量。如果pdsh不允许这样做,cssh

在开始编写脚本之前,请根据主机名设置环境变量。

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

假设您想要的号码在主机名中编码(如问题中所示),您可以像这样简化:

script.sh ${HOSTNAME#server}

答案 1 :(得分:0)

您不需要任何特殊工具 - 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`