複数のホストでSSHを介してサービス検証を実行する必要があります。
ホストのリストを教えてください:host1host2host3
以下のようにスクリプトを作成しましたが、SSHでのみ停止しました。
#!/bin/bash
service=splunk
for host in $(</tmp/tstuf.txt);
do
ssh $host;
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running"
else
echo "$service is not running"
fi
done
スクリプトを実行すると、sshを実行し、現在のホストからホスト1に移動してそこで停止します。サービスチェックを実行していません。誰でも提案できますか
ベストアンサー1
実行するコマンドを発行していないため、スクリプトは「sshで停止しました」。対話型SSHセッションが確立されssh $host
ており、$host
ユーザーが対話を開始するのを待っています。
exit
リモートホストから来ると、スクリプトは引き続きローカルif (( $(ps ....) > 0 )); then .......... fi
システムで実行されます。次に、リスト内の次のホストに対してforループを続けます(終了するまで再び「停止」)。
#!/bin/bash
service=splunk
for host in $(</tmp/tstuf.txt); do
ssh $host "if (( \$(ps -ef | grep -v grep | grep $service | wc -l) > 0 )); then
echo $service is running
else
echo $service is not running
fi"
done
または、@DopeGhotiが提案したように、より簡単でより良い選択肢は次のとおりです。
#!/bin/sh
service=splunk
for host in $(</tmp/tstuf.txt); do
# echo -n "$host:" # optional. uncomment the echo if wanted.
ssh "$host" service "$service" status
done
より良いオプションは、LLNLの並列分散シェルのようなものをインストールすることです。PDSHその後、(ホストリストファイルを設定した後/etc/genders
)、次のコマンドを実行できます。
pdsh -g all service splunk status
service splunk status
「all」タグで定義されたホストグループで実行されます。
pdsh
一度に1つずつ実行するのではなく、複数のホストで同時にコマンドを実行します(したがって、「並列分散シェル」という名前が付けられます)。リモート・システムの各出力行には、対応するホスト名が接頭辞で付けられます。
たとえば、私の小さなホームネットワークでは、次のようになります。
$ pdsh -g all uptime
kali: 12:09:03 up 3 days, 23:26, 2 users, load average: 0.08, 0.05, 0.06
hanuman: 12:09:03 up 12 days, 13:09, 2 users, load average: 0.00, 0.00, 0.00
indra: 12:09:03 up 12 days, 13:05, 2 users, load average: 0.07, 0.12, 0.09
ganesh: 12:09:03 up 34 days, 23:34, 19 users, load average: 1.86, 1.48, 1.40
ただし、上記の例のようuptime
に、 1行の出力column -t
は、たとえば、複数行の出力をpdsh
ホスト名でグループ化するためのコンパニオンユーティリティにパイプすることができますdshbak
。
常にパスワードを入力したくない場合は、forループまたはSSHを介して接続している他のすべてと同様に、各リモートホストにSSHキーベースの認証を設定する必要があります。
pdsh
Debian および他のほとんどの Linux ディストリビューション用にパッケージ化されています。