3

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

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

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

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

问候
萨钦

4

2 回答 2

1

我过去做过类似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}
于 2014-08-21T19:50:59.247 回答
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`
于 2014-08-22T01:00:29.337 回答