サーバーがダウンしているかオフラインであるかを検出するBashスクリプト

サーバーがダウンしているかオフラインであるかを検出するBashスクリプト

背景:サーバーがダウンしたときに通知を受け取る必要があります。サーバーがダウンすると、Sysload コレクターが警告を送信できないことがあります。サーバーがダウンしたときに警告を受けるためにこれを検出する外部ソース(サーバー)があります。

質問:サーバーがダウンしているかオフラインであるかを検出し、警告メッセージ(メール+ SMS)を送信する方法はありますか(私はbashスクリプトを好む)?

答え1

スキャンスクリプトを実行する別のサーバーがある場合は、次のように簡単なpingテストを実行して、サーバーが生きていることを確認します。

#!/bin/bash
SERVERIP=192.168.2.3
[email protected]

ping -c 3 $SERVERIP > /dev/null 2>&1
if [ $? -ne 0 ]
then
   # Use your favorite mailer here:
   mailx -s "Server $SERVERIP is down" -t "$NOTIFYEMAIL" < /dev/null 
fi

定期的にcronスクリプトを実行できます。

mailxがない場合は、その行を使用しているコマンドラインの電子メールプログラムに置き換えてオプションを変更する必要があります。携帯電話会社がSMSメールアドレスを提供している場合は、そのアドレスに電子メールを送信できます。たとえば、AT&Tの場合、次のアドレスに電子メールを送信すると、電話番号@txt.att.net お使いの携帯電話に電子メールを送信します。

以下は、SMSゲートウェイに送信された電子メールのリストです。

http://en.wikipedia.org/wiki/List_of_SMS_gateways

あなたのサーバーが公にアクセス可能なWebサーバーである場合、あなたのウェブサイトを監視し、ウェブサイトがダウンしたときに通知を送信する無料のサービスがあります。無料ウェブサイトの監視ちょっと探してみてください。

答え2

Pingはオプションですが、多くの場合、マシンが参照している物理サーバーがダウンしている間でも、マシンはping応答を送信できます。最後までテストするのが最善です。次の例では、Webサーバーからページを要求します。

Webサーバーの場合は、次のようになります。

#!/bin/bash
wget -qO /dev/null 'http://webserver/some_existing_short_document.html' || {
    echo "Webserver down"
    # another mailer example
    sendemail -s mailserverip -f 'from@localhost' -t 'user@localhost' -u 'Webserver down' -m 'The webserver is down'
}

HTML文書をPHP文書に変更し、PHPスクリプトを使用してデータベース接続、ファイルシステムなどの項目をテストすることで、サーバーのより多くの側面をテストすることもできます。これにより、コンピュータを事前に監視できます(サーバーがクラッシュする前に問題を見つけます)。

メールサーバーを確認するのと似ていますが、Webページを要求するのではなく、メールサーバーを介して電子メールを送信し、メールボックスに受信されていることを確認するだけです。

答え3

これが同じ問題を解決した方法です。

#!/bin/bash
NOTIFYEMAIL=<your email>
SMSEMAIL=<cell phone number @ sms-gateway>
SENDEREMAIL=alert@localhost
SERVER=http://127.0.0.1/
PAUSE=60
FAILED=0
DEBUG=0

while true 
do
/usr/bin/curl -sSf $SERVER > /dev/null 2>&1
CS=$?
# For debugging purposes
if [ $DEBUG -eq 1 ]
then
    echo "STATUS = $CS"
    echo "FAILED = $FAILED"
    if [ $CS -ne 0 ]
    then
        echo "$SERVER is down"

    elif [ $CS -eq 0 ]
    then
        echo "$SERVER is up"
    fi
fi

# If the server is down and no alert is sent - alert
if [ $CS -ne 0 ] && [ $FAILED -eq 0 ]
then
    FAILED=1
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER failed"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$SMSEMAIL" 
        echo "$SERVER went down $(date)" | /usr/bin/mailx -s "$SERVER went down" -r "$SENDEREMAIL" "$NOTIFYEMAIL" 
    fi

# If the server is back up and no alert is sent - alert
elif [ $CS -eq 0 ] && [ $FAILED -eq 1 ]
then
    FAILED=0
    if [ $DEBUG -eq 1 ]
    then
        echo "$SERVER is back up"
    fi
    if [ $DEBUG = 0 ]
    then
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$SMSEMAIL"
        echo "$SERVER is back up $(date)" | /usr/bin/mailx -s "$SERVER is back up again" -r "$SENDEREMAIL" "$NOTIFYEMAIL"
    fi
fi
sleep $PAUSE
done

答え4

使用することをお勧めしますナギオス、必要なサービスを監視および警告するためのインフラストラクチャです(利用可能なプラグインが多く、自分で作成することもできます)。サーバーの可用性を確認するために簡単なpingを実行することは確かに可能ですが、他の人が指摘したように、サービスの可用性(ネットワーク、電子メールなど)を確認することをお勧めします(nagiosはこれを簡単に実行できます)。

関連情報