Linux-一度に多くのマシンで同じコマンドを実行する


39

私は時折同じコマンドを実行する必要がある約12のLinuxボックスを持っています。各マシンにログオンしてコマンドを一度に1つずつ実行することから、これを行う簡単な方法(または自動化された方法)はありますか?常に同じコマンドではなく、事前に設定された時間ではないため、などのツールには理想的ではありませんcron



最後に、正規リスト:)
rogerdpack

回答:


12

ええと、おそらくpconsoleがあなたの望むツールです。


うわー、pconsoleはかなりクールに見えます!私はそれを問題なくインストールしました、そして、それは今のところ素晴らしいようです。ありがとう!
クリスバンチ

それも私のお気に入りのツールの1つです。:) np
ノード


8

Puppetは、セットアップと使用に関するlinux.comの記事で確認できます。


1
うーん、パペットはかなりおもしろそうです。pconsoleが私を失敗させ始めた場合、私はすでにそれを実行しており、Puppetの言語を学ぶよりも簡単なので、それを見ていきます。提案をありがとう!
クリスバンチ

具体的には、Marionette Collectiveツール(mcollective、またはmcoとも呼ばれます)。これは、パペットの事実に基づいて、ホストのグループで物事を行うことができるパペットの一部です。
ブライアンミントン


8

Capistranoを試すことができます。もともとはRails展開ツールですが、リモートマシンで多くのことを行うようになりました。

複数のマシンを管理するためのより完全なアプローチについては、Chefを試してください。



6

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を含む)のリストが含まれています。 カピストラーノはすでに言及されており、(私が理解していることから)そのリストにも載っている可能性があります。


5

KDEデスクトップを使用している場合、konsoleには「すべてのセッションに入力を送信する」オプションがあります。同じkonsoleウィンドウで開かれたすべてのセッションに適用されます。


5

またssh [user@]hostname [command]、ホスト名を試行してループすることもできます。


2
これは実際には「一度に」部分を満たしていません(並列ではなく、直列化されています)が、それは質問の本文からの要件ではないようで、これはまともな解決策かもしれません。
voretaq7

4

funcもご覧ください。Funcを使用すると、モジュールアーキテクチャを使用して、パッケージの処理からコマンドの実行など、システムのさまざまな側面を制御できます。SSLを介したクライアント/サーバーモジュールで動作し、認証スキームもかなり柔軟です。


それに加えて、FuncはRed Hatによって構築されており、将来のFedora / RHEL製品での使用が拡大する可能性があります。これは間違いなく注目すべきものです。この種の問題の事実上の標準ソリューションになると予想されるからです。
クリストファーキャシェル09年

4

ClusterSSHを使用しましたが、動作します。ただし、特定の端末数を超えると、拡張性が低下します。

誰もxargsについて言及していないことに驚いています。Xargsはほとんどの場合に最適です。実際、私はこれに非常に満足しているので、clustershを使用することはありません。

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(すべてのWebホストでApacheを再起動します。)


フォロワーにとって、この-P30部分は「並行して30を実行する」ことを意味します
rogerdpack

4

すでにtmuxユーザーである場合は、tmux-cssh(の略TMUX-C(luster)-SSH)をお楽しみください。サーバー名のリストを指定すると、新しいtmuxウィンドウが開き、独自のペインで各サーバーへのSSHセッションが開きます。すべてのキーストロークが各ウィンドウにコピーされます。ホストの数によっては、出力が読みにくい場合があります。


1
1つのライナーリンクは必ずしも有用ではありません。説明してください。なぜこのツールをお勧めしますか?
鹿ハンター

3

その他のツールは次のとおりです。

RunDeckは、軽量のControlTierとも呼ばれます。

これらのツールはクラスターシェルだけでなく、Webフロントエンドも提供し、将来の使用のためにジョブを保存できます。


2

Cluster SSH(cssh)を試すこともできます。私は使用していませんが、LinuxJournal.comに「Manage Multiple Servers Efficiently」と呼ばれる記事があります。


1

シンプルで非常に強力な料理を使用してください!このスクリプトは私の人生を変えました:)すべてを支配する1つのスクリプト!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

勤勉シェル「ディッシュ」は、複数のシステムで同時にssh / rsh / telnet / mysqlを介してコマンドを実行します。数百のノードでパスワードの変更、構成の更新、ファイルのコピー、ステータスの確認などが簡単になります。DishはIBMの「dsh」(分散シェル)に似ていますが、さらに認証を必要とするコマンドをリモートで実行できます。ClusterIt、ダンサーのシェル、並列分散シェル、C3などの分散シェル(または同様のツール)を含む他のオープンソースパッケージと比較すると、dishは柔軟なソリューションが必要な場合にスリムで使いやすいリモートシェルラッパーです。こちらからオンラインで料理のマニュアルページを閲覧できます。


1

他の回答に記載されているコマンドを使用した例を次に示します。

pdsh

数値の範囲をとることができ、最初にホスト名で出力され、実際に維持されているようです:

最も単純なバージョン:

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

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

リモートシェル設定が必要です

マック: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

オプションで、ファイルからマシンのリストをすべて取得することもできます。

ここにさらに例を追加してください、それはコミュニティwikiです

マック: brew install pssh

クラスターSSH

クラスターSSH(「Mac専用バージョン」には明らかに2つのバージョンがあります)は、実際に「実際の端末」を開き、その下に他のすべてに入力を送信する大きな端末があります。したがって、複数に送信するUIのようなものです。

例:

csshX hostname0[1-2] hostname3 次に、赤いボックスに入力すると、各ターミナルウィンドウに移動し、ホストごとに1つ表示されます。

mac:(brew install csshx古いバージョンでも動作します)

brew install ansibleFWIW もあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.