3

異なるサーバーに異なる引数を指定しながら、複数の Ubuntu-Linux サーバーでアプリケーションを並行して実行する必要があります。私はそれをグーグルで検索しようとしましたが、可能な解決策にたどり着くことができませんでした。ssh/pdsh/parallel も試しましたが、成功しませんでした。

シナリオをさらに説明するために、3 台のサーバーすべてで script.sh を並行して実行する必要があるが、引数が異なる非動作例 (pdsh を使用) を次に示します。参考までに、公開/秘密の 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 に答える