既存のツールのような一連のコマンドを実行するためのツールを探しています。
parallel -h
parallel [OPTIONS] command -- arguments
for each argument, run command with argument, in parallel
parallel [OPTIONS] -- commands
run specified commands in parallel
しかし、これらのコマンドを複数のコンピューターのsshで実行し、多くのホストと通信するためのpssh
またはpdsh
の優れた機能をいくつか使用したいと思います。私は 動作するものをハックアウトしました ですが、sshの処理はこれらのツールと比較して何もありません-すべてを停止することはできず、すべての出力を表示することさえできません。
ツールに基本的な負荷分散があればさらに良いですが、ホストの選択には別のツールを使用することを考えていました。 (負荷、メモリ、およびコンピューターがインタラクティブに使用されているかどうかを照会するための優れたツールもありがたいですが、ホストの選択に十分なものをすでに作成しています。)これはクラスター上になく、私はしません。 sshd以外のデーモンに依存するか、管理者にCondorのような本格的なクラスタージョブスケジューラをインストールするように依頼します。これらのコンピューターのいずれにもrootアクセス権がありません。
編集:強調するために、各ホストで異なるコマンドを実行したい-通常、最初のparallel
上記の使用例。
ああ! GNUバージョンの並列 (私がインストールしたものではない)がこれを行うようです。負荷分散はなく、各stdoutとstderrで何が行われるかを確認するために試したことはありませんが、これはまさに私が望んでいたことです。
To run commands on more than one remote computer run:
seq 10 | parallel --sshlogin server.example.com,server2.example.net echo
残念ながら、ステータスの更新を提供し、構成可能な出力設定を持ち、いくつかの単純な負荷分散を組み込んだスクリプトを作成したので、今はそれを使い続けます。
ブロッククォート編集:強調するために、各ホストで異なるコマンドを実行したいと思います。ブロッククォート
別のコマンドが必要な場合、並列部分はどこにありますか?並列とは、ホストのコレクションで同じコマンドを開始することを意味します(並列で実行)...順次プロセスである異なるホストで異なることを実行する場合
clusterssh
は、調べる価値のあるもう1つのツールです。各ホストのターミナルウィンドウを開いて並べて表示するという点で、よりインタラクティブです。各端末でコマンドを互いに分離して実行することも、すべて(または一部)で一度に実行することもできます。たとえば、一度に12のシステムでtop
を実行し、そのうちの1つだけでプロセスを追跡します。
あなたは本当にそこにある多くのクラスタリング技術の1つを調べる必要があります。 Apache Hadoop を見てみてください。私は最近、並列コンピューティングを実行するための10,000コアクラスターのセットアップについても興味深いと思われる素晴らしい記事を読みました: http://goo.gl/A8hgX
私はこれにmusshを使用しました。これは、bashベースですが、並行して実行されます。とても満足しています。
また、ローカルのLinuxfestでrshall(名前にRSHを保持しているにもかかわらず、sshをネイティブに使用)についての講演もいくつか見ました。これはPerlベースであり、ホストリストのクエリに外部ソースを使用できますが、特定のホスト情報を特定する必要があります。フォーマット。
これらのどちらにもキューイングやジョブスケジューリングはありませんが、cronを介して、または必要に応じて実行できます。
これらはいずれもルートアクセスを必要としませんが、システムへのキーベースの認証が必要です。