10 個のノードで同時にコマンドを開始することは可能ですか?
以下は私のスクリプトの一部です:
#! /bin/sh
nb_lignes=`wc -l $1 | cut -d " " -f1`
echo "$nb_lignes machines"
for i in $(seq $nb_lignes)
do
machine=`head $1 -n $i | tail -1`
ssh root@$machine -x "instruction"
done
答え1
はい、そうです。dsh
コマンドはまさにあなたが言及したとおりの機能を提供します。パラメータで指定されたノードのリストに対して同じコマンドを実行し、これらのノードのいずれかの応答について stdout と stderr を解析することもできます。
これを使用するには、dsh
コマンドがパスワードを要求するのを避けるために、SSH キー認証を使用することをお勧めします。
という代替手段がありますclusterssh
。これはコマンドの対話型バージョンなのでdsh
、マシンごとにシェルを備えたミニウィンドウが開き、特定のシェルにコマンドを入力したり、すべてのウィンドウにグローバル コマンドを入力したりすることができます。
答え2
GNU Parallel を使用すると次のようになります。
parallel --slf $1 --nonall instruction
CPU ごとに 1 つのジョブが生成されます。
GNU Parallel は汎用の並列化ツールであり、同じマシンまたは SSH アクセスできる複数のマシンでジョブを並列に実行することを容易にします。多くの場合、for
ループを置き換えることができます。
4 つの CPU で実行したい 32 個の異なるジョブがある場合、並列化するための最も簡単な方法は、各 CPU で 8 つのジョブを実行することです。
GNU Parallel は、代わりに、1 つのプロセスが終了すると新しいプロセスを生成します。これにより、CPU がアクティブな状態になり、時間が節約されます。
インストール
GNU Parallel がディストリビューションにパッケージ化されていない場合は、ルート アクセスを必要としない個人用インストールを行うことができます。次の操作を実行すると、10 秒で完了します。
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
その他のインストールオプションについては、http://git.savannah.gnu.org/cgit/parallel.git/tree/README
もっと詳しく知る
その他の例を見る:http://www.gnu.org/software/parallel/man.html
紹介ビデオをご覧ください:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
チュートリアルを進めてください:http://www.gnu.org/software/parallel/parallel_tutorial.html
サポートを受けるには、メール リストに登録してください。https://lists.gnu.org/mailman/listinfo/parallel