web-dev-qa-db-ja.com

複数のサーバーでコマンドを実行する

複数のサーバーでプロセスを実行したい。次のラッパースクリプトを使用しています。スクリプトは一度に1つずつサーバーに移動します。複数のサーバーで実行できるように変更したいと思います。それを行う方法はありますか?

#!/bin/bash
for ip in $(<ALL_SERVERS_IP); do
    # Tell the remote server to start bash, but since its
    # standard input is not a TTY it will start bash in
    # noninteractive mode.
    ssh -q "$ip" bash <<-'EOF'
        printf "%s\n" ================== "$(hostname) ::: Current date : $(date)" \
                            ==================
        ./remote 
    EOF
done
4
user67186

そのためのツールをいくつか知っていますが、最も簡単なのは Fabric です。見て、どう思いますか。

0
Willian Paixao

はい。複数のリモートホストでコマンドを同時に実行するpdshを試してください。あなたのタスクは次のように書くことができます:

pdsh -w ssh:$(echo $(<ALL_SERVERS) | sed -e 's/ /,/g') 'printf "%s\n" ...'
2
dg99

GNU Parallel を探しているようですね。それはまさにそのために書かれたものです。あなたの場合、あなたはそうするでしょう:

parallel ./remote --sshloginfile ALL_SERVERS_IP

上記はALL_SERVERS_IPは、1行に1つのIPまたはホスト名を記述したテキストファイルです。ログインが異なる可能性がある場合は、次のようにリストを作成します。

[email protected]
[email protected]
[email protected]
2
terdon