複数のホストに対してコマンドを同時に実行できるツールとして、以前にCluster SSHを試してみました。
今度は Parallel ssh (pssh) を試してみました。
参考: 1つのシェルから複数のSSHセッションを同時に実行するツール3種類を試す - SourceForge.JP Magazine
bashでforループを回すのはちょっとした事だとよく使いますが、psshだと同時にできるのが利点のひとつ。
とりあえず、メモ程度ですがopenSUSE 10.3で試してみました。
Parallelということなので、ほぼ同時に実行開始されます。
そして、結果が返ってくるのはばらばらです。結果を標準出力に表示する場合は見辛いかもしれません。
console01:~ # cat hosts-admin-all admin01 admin02 admin03 admin04 admin05 admin06 console01:~ #-i オプションでホスト毎に表示。
console01:~ # pssh -h hosts-admin-all -i uptime [1] 16:24:22 [SUCCESS] admin01 22 4:24pm up 47 days 3:04, 1 user, load average: 0.02, 0.01, 0.00 [2] 16:24:22 [SUCCESS] admin06 22 4:24pm up 47 days 3:29, 1 user, load average: 0.00, 0.00, 0.00 [3] 16:24:22 [SUCCESS] admin04 22 4:24pm up 47 days 3:21, 2 users, load average: 0.10, 0.06, 0.01 [4] 16:24:22 [SUCCESS] admin05 22 4:24pm up 47 days 3:04, 1 user, load average: 0.00, 0.02, 0.00 [5] 16:24:22 [SUCCESS] admin02 22 4:24pm up 47 days 3:03, 2 users, load average: 0.01, 0.04, 0.00 [6] 16:24:22 [SUCCESS] admin03 22 4:24pm up 47 days 3:04, 1 user, load average: 0.00, 0.03, 0.00 console01:~ #環境変数でホストファイル指定などを省略できる。
console01:~ # export PSSH_HOSTS=~/hosts-admin-allコマンドの結果が1行だけであれば、-P オプションでもわかりやすい。
console01:~ # pssh -P uptime | grep -v SUCCESS | sort admin01: 4:24pm up 47 days 3:04, 1 user, load average: 0.01, 0.01, 0.00 admin02: 4:24pm up 47 days 3:04, 2 users, load average: 0.01, 0.03, 0.00 admin03: 4:24pm up 47 days 3:04, 1 user, load average: 0.07, 0.04, 0.00 admin04: 4:24pm up 47 days 3:21, 2 users, load average: 0.06, 0.06, 0.01 admin05: 4:24pm up 47 days 3:05, 1 user, load average: 0.00, 0.02, 0.00 admin06: 4:24pm up 47 days 3:30, 1 user, load average: 0.00, 0.00, 0.00 console01:~ #-o オプションで結果の出力ディレクトリを指定し、more等で確認。
console01:~ # pssh -o /root/pssh-log/ uptime [1] 16:30:10 [SUCCESS] admin01 22 [2] 16:30:10 [SUCCESS] admin06 22 [3] 16:30:10 [SUCCESS] admin04 22 [4] 16:30:10 [SUCCESS] admin03 22 [5] 16:30:10 [SUCCESS] admin05 22 [6] 16:30:10 [SUCCESS] admin02 22 console01:~ # console01:~ # more /root/pssh-log/admin0? :::::::::::::: /root/pssh-log/admin01 :::::::::::::: 4:30pm up 47 days 3:09, 1 user, load average: 0.08, 0.04, 0.00 :::::::::::::: /root/pssh-log/admin02 :::::::::::::: 4:30pm up 47 days 3:09, 2 users, load average: 0.07, 0.02, 0.00 :::::::::::::: /root/pssh-log/admin03 :::::::::::::: 4:30pm up 47 days 3:09, 1 user, load average: 0.01, 0.05, 0.01 :::::::::::::: /root/pssh-log/admin04 :::::::::::::: 4:30pm up 47 days 3:26, 2 users, load average: 0.02, 0.05, 0.01 :::::::::::::: /root/pssh-log/admin05 :::::::::::::: 4:30pm up 47 days 3:10, 1 user, load average: 0.00, 0.02, 0.00 :::::::::::::: /root/pssh-log/admin06 :::::::::::::: 4:30pm up 47 days 3:35, 1 user, load average: 0.03, 0.04, 0.01 console01:~ #結果をgrepやawk等で整形してホスト毎に確認しやすいので良いかも。
scpの並行処理版の pscp コマンドもあります。
console01:/root/foo を 対象ホストの /tmp/foo にコピー。console01:~ # touch /root/foo console01:~ # console01:~ # pscp /root/foo /tmp/foo [1] 16:39:59 [SUCCESS] admin04 22 [2] 16:39:59 [SUCCESS] admin03 22 [3] 16:39:59 [SUCCESS] admin01 22 [4] 16:39:59 [SUCCESS] admin02 22 [5] 16:39:59 [SUCCESS] admin06 22 [6] 16:39:59 [SUCCESS] admin05 22 console01:~ # console01:~ # pssh -i ls -l /tmp/foo [1] 16:40:24 [SUCCESS] admin01 22 -rw-r--r-- 1 root root 0 Jun 17 16:39 /tmp/foo [2] 16:40:25 [SUCCESS] admin05 22 -rw-r--r-- 1 root root 0 Jun 17 16:39 /tmp/foo [3] 16:40:25 [SUCCESS] admin06 22 -rw-r--r-- 1 root root 0 Jun 17 16:39 /tmp/foo [4] 16:40:25 [SUCCESS] admin04 22 -rw-r--r-- 1 root root 0 Jun 17 16:39 /tmp/foo [5] 16:40:25 [SUCCESS] admin03 22 -rw-r--r-- 1 root root 0 Jun 17 16:39 /tmp/foo [6] 16:40:25 [SUCCESS] admin02 22 -rw-r--r-- 1 root root 0 Jun 17 16:39 /tmp/foo console01:~ #
対象ホストの台数が多くなってくるとforループより便利かもしれないですね。
しばらく使ってみます。
はじめまして〜!!
しげふみさんのテンプレート使わせてもらってます
そこで〜お聞きしたいんですが〜
ヘッダーに画像入れたいのですが
やり方がわかりません
教えてもらえないでしょうか
応援二つ
ほな また〆