私は時折同じコマンドを実行する必要がある約12のLinuxボックスを持っています。各マシンにログオンしてコマンドを一度に1つずつ実行することから、これを行う簡単な方法(または自動化された方法)はありますか?常に同じコマンドではなく、事前に設定された時間ではないため、などのツールには理想的ではありませんcron
。
私は時折同じコマンドを実行する必要がある約12のLinuxボックスを持っています。各マシンにログオンしてコマンドを一度に1つずつ実行することから、これを行う簡単な方法(または自動化された方法)はありますか?常に同じコマンドではなく、事前に設定された時間ではないため、などのツールには理想的ではありませんcron
。
回答:
Capistranoを試すことができます。もともとはRails展開ツールですが、リモートマシンで多くのことを行うようになりました。
複数のマシンを管理するためのより完全なアプローチについては、Chefを試してください。
Ansibleにはアドホックコマンドを実行する機能があり、完全な構成管理を実行するように拡張することもできます。グループに基づいて一致する機能は優れています。
Stack Overflowからの回答をコピーして貼り付けると思います。。。
先日、多くのサーバーでコマンドを一度に実行する方法の問題がPerlメーリングリストに掲載されました。そこで、gshを使用することと同じ推奨事項を提示します:http ://outflux.net/unix/ ソフトウェア/ gsh
gshはfor box in box1_name box2_name box3_name
既に与えられているソリューションに似ていますが、gshの方が便利だと思います。web、db、RHEL4、x86_64、その他(man ghosts)などのグループのサーバーを含む/ etc / ghostsファイルを設定し、gshを呼び出すときにそのグループを使用します。
[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$
たとえば、web + dbまたはweb-RHEL4を使用して、ゴーストグループを結合または分割することもできます。
また、shmuxを使用したことはありませんが、そのWebサイトには、多数のサーバーで一度にコマンドを実行できるソフトウェア(gshを含む)のリストが含まれています。 カピストラーノはすでに言及されており、(私が理解していることから)そのリストにも載っている可能性があります。
funcもご覧ください。Funcを使用すると、モジュールアーキテクチャを使用して、パッケージの処理からコマンドの実行など、システムのさまざまな側面を制御できます。SSLを介したクライアント/サーバーモジュールで動作し、認証スキームもかなり柔軟です。
ClusterSSHを使用しましたが、動作します。ただし、特定の端末数を超えると、拡張性が低下します。
誰もxargsについて言及していないことに驚いています。Xargsはほとんどの場合に最適です。実際、私はこれに非常に満足しているので、clustershを使用することはありません。
例
echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"
(すべてのWebホストでApacheを再起動します。)
-P30
部分は「並行して30を実行する」ことを意味します
その他のツールは次のとおりです。
RunDeckは、軽量のControlTierとも呼ばれます。
これらのツールはクラスターシェルだけでなく、Webフロントエンドも提供し、将来の使用のためにジョブを保存できます。
Cluster SSH(cssh)を試すこともできます。私は使用していませんが、LinuxJournal.comに「Manage Multiple Servers Efficiently」と呼ばれる記事があります。
シンプルで非常に強力な料理を使用してください!このスクリプトは私の人生を変えました:)すべてを支配する1つのスクリプト!
http://nic-nac-project.org/~drimiks/gnu/dish.shtml
勤勉シェル「ディッシュ」は、複数のシステムで同時にssh / rsh / telnet / mysqlを介してコマンドを実行します。数百のノードでパスワードの変更、構成の更新、ファイルのコピー、ステータスの確認などが簡単になります。DishはIBMの「dsh」(分散シェル)に似ていますが、さらに認証を必要とするコマンドをリモートで実行できます。ClusterIt、ダンサーのシェル、並列分散シェル、C3などの分散シェル(または同様のツール)を含む他のオープンソースパッケージと比較すると、dishは柔軟なソリューションが必要な場合にスリムで使いやすいリモートシェルラッパーです。こちらからオンラインで料理のマニュアルページを閲覧できます。
他の回答に記載されているコマンドを使用した例を次に示します。
数値の範囲をとることができ、最初にホスト名で出力され、実際に維持されているようです:
最も単純なバージョン:
pdsh -w hostname echo done
出力:
hostname: done
より複雑な例:
pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"
出力:
hostname8: done
hostname7: done
otherhost: done
マック: brew install pdsh
dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"
リモートシェル設定が必要です
マック: brew install dsh
pssh -i -H user@host -H user@host "sleep 5 && echo done"
オプションで、ファイルからマシンのリストをすべて取得することもできます。
ここにさらに例を追加してください、それはコミュニティwikiです
マック: brew install pssh
クラスターSSH(「Mac専用バージョン」には明らかに2つのバージョンがあります)は、実際に「実際の端末」を開き、その下に他のすべてに入力を送信する大きな端末があります。したがって、複数に送信するUIのようなものです。
例:
csshX hostname0[1-2] hostname3
次に、赤いボックスに入力すると、各ターミナルウィンドウに移動し、ホストごとに1つ表示されます。
mac:(brew install csshx
古いバージョンでも動作します)
brew install ansible
FWIW もあります