2017-07-06 6 views
0

私はpingに役立ち、ホストマシンとサービスのネットワークインターフェイスレベルのステータスを取得するためのbashスクリプトを作成しています。 このスクリプトは、失敗した場合に電子メールアラートを送信します。電子メールサービスまたはサーバーが自動的に起動するときの警告

#!/bin/bash 
HOSTS="192.168.8.200" 
COUNT=4 
for myHost in $HOSTS 
do 
    count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') 
    if [ $count -eq 0 ]; then 
    # 100% failed 
    echo -e "HOST:$myHost is down (ping failed) at $(date)" | mailx -A gmail -s “Mail  subject” [email protected] 

    fi 
done 

これは問題なく動作します。 しかし、ホストが自動的に起動すると、1回の電子メールアラートを得るのに役立つ必要があります(pingの成功)。

+0

あなたはホストと電子メールのステータスを確認するためのコードを書いていますので、正確に何か助けが必要ですか?ホストが起動しているときに、elseとアクションコードを追加するだけです。 –

答えて

1

スクリプトの呼び出し中にホストの状態(上/下)を保存する必要があります。 ホストが "アップ"状態で、以前の状態が "ダウン"の場合、電子メールを送信する必要があります。 「checkコマンド」の結果を/ tmp/ のファイルに書き込むことができます。これは、サーバーがファイルの内容を読み込んでいることが確認された場合だけです。ファイル内の状態が「ダウン」の場合は、電子メールに「up」を書き込みます。 次のチェックでサーバが稼働している場合は、以前にサーバがアップしていたため、追加のメールは送信されません。

#!/bin/bash 
HOSTS="192.168.8.200 192.168.8.201 192.168.122.1" 
COUNT=4 
STATE="/tmp/ping_state.txt" 

for myHost in $HOSTS 
do  
    count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') 
    if [ $count -eq 0 ]; then 
    # 100% failed 
    #echo -e "HOST:$myHost is down (ping failed) at $(date)" | mailx -A gmail -s “Mail  subject” [email protected] 
    echo "host $myHost down" 
    #delete all previous entries of that ip 
    sed -i "/$myHost/d" $STATE 
    #mark host as down 
    echo "$myHost - down" >> $STATE 
    else  
    CHECK=`grep "$myHost" $STATE | grep -o "down"` 
    if [ "$CHECK" = "down" ]; then 
     echo "host $myHost up again" 
     #insert email for host up here 
    fi  

    #delete all previous entries of that ip 
    sed -i "/$myHost/d" $STATE 
    echo "$myHost - up" >> $STATE 
    fi  
done 

単純なテストの場合メールを送信する代わりにecho文を使用しました。

+0

迅速なアドバイスをありがとう。私が確認しておきます、チェックします。 –

+0

返信いただきありがとうございます。出来た。 –

関連する問題