2016-12-30 13 views
0

私はBashの経験はほとんどありませんが、ここでは達成しようとしていることがあります。テキストファイル内の文字列を検索し、結果に基づいて特定のアクションを実行する方法

私は2つの異なるテキストファイルに複数のサーバー名を付けました。 Windowsアップデートをインストールしてリブートする前に、すべてのnagiosホスト/サービスアラートを無効にする必要があります。

host=/Users/bob/WSUS/wsus_test.txt 
password="my_password" 

while read -r host 
do 
    curl -vs -o /dev/null -d "cmd_mod=2&cmd_typ=25&host=$host&btnSubmit=Commit" "https://nagios.fqdn.here/nagios/cgi-bin/cmd.cgi" -u "bob:$password" -k 
done <wsus_test.txt>> /Users/bob/WSUS/diable_test.log 2>&1 

これは私の現在のコードが意図した通りに縮小されたものですが、複数の地域にサーバーがあります。各サーバー名には、地域(LAX、NYCなど)に基づいて3文字のコードが付加されています。第2に、各地域にはNagiosサーバーがあるので、渡されるサーバー名に基づいて正しい地域のNagiosサーバーに接続するには上記のコードが必要です。

テキストファイルに4つのテストサーバーを追加しようとしました。

if grep lax1 /Users/bob/WSUS/wsus_text.txt; then 
     <same command as above but with the regional nagios server name> 
    fi 

これは意図したとおりに機能せず、実際にはAPI呼び出しで無効/有効にするものはありません。もう一度、私はBashで少しでもやったことがありますので、どのような指摘にも感謝します。

+1

あなたはwsus_text.txtからいくつかのサンプル行を貼り付けてくださいことはできますか? – codeforester

+0

ああ、ちょうどFQDNなので、lax1-fs01.company.priv、lax1-ts01.company.priv、nyc1-dc01.company.privなどのようなものです。各行でFQDNを区切ります。 –

答えて

1

は、ホスト名から領域を抽出し、NagiosのURLでそれを使用し、次のように:

while read -r host; do 
    region=$(cut -f1 -d- <<< "$host") 
    curl -vs -o /dev/null -d "cmd_mod=2&cmd_typ=25&host=$host&btnSubmit=Commit" "https://nagios-$region.fqdn.here/nagios/cgi-bin/cmd.cgi" -u "bob:$password" -k 
done <wsus_test.txt>> /Users/bob/WSUS/diable_test.log 2>&1 
+0

ああああ。これがうまくいくように見えます。私はそれをテストし、私がそれが動作することを確認するときに答えとしてマークします。再度、感謝します。 –

+1

これはうまくいった!ありがとう! –

+0

ログを見ると、これはうまくいくように見えますが、複数のサーバーの作業といくつかの作業に対して実行すると、いくつかの作業は実行されません。私のログファイルには、 "接続番号0からホストまでのメッセージが残っています"というメッセージが表示されますが、接続が閉じられたというメッセージは表示されません。私はもともと、あるサーバーから次のサーバーにジャンプするときにこれが問題になると考えていましたが、同じNagiosサーバー上に存在するホスト名と同じテストを行いました。何か案は? –

関連する問題