複数のノードで同時にコマンドを開始することは可能ですか?

複数のノードで同時にコマンドを開始することは可能ですか?

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 並列スケジューリング

インストール

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

関連情報