0

いくつかの EC2 インスタンスをセットアップしましたが、すべてホーム ディレクトリにスクリプトがあります。各 EC2 インスタンスで同時にスクリプトを実行したいと考えています。つまり、ループを通過することはありません。

端末のインタラクティブな使用法で OSX 用の csshX を見たことがありますが、次のようなコマンドを実行するためのコマンドライン コードは何なのか疑問に思っていました。

ssh user@ip.address . test.sh

以降のすべてのインスタンスで test.sh スクリプトを実行するには...

csshX user@ip.address.1 user@ip.address.2 user@ip.address.3 . test.sh 

動作しません...

シェルスクリプトに追加してこのプロセスを自動化したいので、コマンドラインでこれを行いたいと思います。

ボーナスポイントとして...スクリプトの実行が完了したというコマンドを送信するマシンにメッセージを送り返す方法があれば、それは素晴らしいことです。

4

1 に答える 1

1

これらすべてをバックグラウンドで実行するマスター シェル スクリプトがあれば十分でしょうか? 例えば、

#!/bin/sh
pidlist="ignorethis"
for ip in ip1 ip2
do
    ssh user@$ip . test.sh &
    pidlist="$pidlist $!" # get the process number of the last forked process
done

# Now all processes are running on the remote machines, and we want to know
# when they are done.

# (EDIT) It's probably better to use the 'wait' shell built-in; that's
# precisely what it seems to be for.
while true
do
    sleep 1
    alldead=true
    for pid in $pidlist
    do
        if kill -0 $pid > /dev/null 2>&1
        then
            alldead=false
            echo some processes alive
            break
        fi
    done
    if $alldead
    then
        break
    fi
done

すべて完了をエコーし​​ます。

完全に同時ではありませんが、リモート スクリプトを並行して開始する必要があります。

于 2012-12-11T03:33:53.487 に答える