
背景:サーバーがダウンしたときに通知を受け取る必要があります。サーバーがダウンすると、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はこれを簡単に実行できます)。