IP アドレスを 1 つずつ読み、そのサーバーの特定の場所を確認する必要があります。

IP アドレスを 1 つずつ読み、そのサーバーの特定の場所を確認する必要があります。

次の詳細を含む ip.txt ファイルがあります。

cat ip.txt
10.10.100.11 10.10.100.12
10.10.100.21 10.10.100.22
10.10.100.101
10.10.100.31 10.10.100.32
10.10.100.201
eof

1行にスペースで区切られた2つのIPがある場合、1つはアクティブサーバー、もう1つはパッシブサーバーです。 IPが1つしかない場合、そのIPはアクティブサーバーにすぎません。

そのため、スクリプトがファイルを確認し、そのアクティブip.txtサーバーにのみログインして出力を取得したいと思います。ps -ef| grep pmon

ベストアンサー1

このawkユーティリティを使用して、ファイルの各行からスペースで区切られた最初のフィールドを抽出できます。

各 IP 番号出力に対してシェルを使用してリモートawksshコマンドを実行できます。リモートホストでps -efフィルタリングを行う必要はありません。grep

#!/bin/sh

awk '{ print $1 }' ip.txt |
while IFS= read -r remote; do
        printf 'Processing %s...\n' "$remote"
        ssh -n "$remote" ps -ef | grep -F pmon
done

-nwithオプションを使用すると、残りの出力sshを読み取ることができませんawk

-Foption を使用すると、grepユーティリティは正規表現一致ではなくテキスト文字列比較で指定されたパターンを使用します。このオプションを使用しても、現在のコードに対する何も変更されず、実行速度も速くなりません(このsshコマンドはおそらくこのスクリプトのボトルネックになる可能性があります)。それにもかかわらず、これは正規表現ではなくテキスト文字列を使用して検索していることを読者に知らせます。


awkループ内の入力ファイルからスペースで区切られた2つの値を読み取り、2番目の値を無視すると、このコードを簡単に削除できます。

#!/bin/sh

while read -r remote dummy; do
        printf 'Processing %s...\n' "$remote"
        ssh -n "$remote" ps -ef | grep -F pmon
done <ip.txt

ホストグループを管理するためのより永続的なソリューションが必要な場合は、Ansibleなどのソリューションに移行することを検討してください。

おすすめ記事