背景:サーバーがダウンしたときにアラートを受信する必要があります。サーバーがダウンすると、Sysloadコレクターはアラートを送信できなくなる可能性があります。サーバーがダウンしたときにアラートを受け取るには、それを検出する外部ソース(サーバー)があります。
質問:サーバーがダウンまたはオフラインになったことを検出し、アラートメッセージ(電子メール+ SMS)を送信する方法はありますか(私はbashスクリプトを好む)。
背景:サーバーがダウンしたときにアラートを受信する必要があります。サーバーがダウンすると、Sysloadコレクターはアラートを送信できなくなる可能性があります。サーバーがダウンしたときにアラートを受け取るには、それを検出する外部ソース(サーバー)があります。
質問:サーバーがダウンまたはオフラインになったことを検出し、アラートメッセージ(電子メール+ SMS)を送信する方法はありますか(私はbashスクリプトを好む)。
回答:
checkスクリプトを実行する別のサーバーがある場合、次のようなものは、サーバーが稼働しているかどうかを確認するための簡単なPingテストを実行します。
#!/bin/bash
SERVERIP=192.168.2.3
NOTIFYEMAIL=test@example.com
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
サーバーが一般にアクセス可能なウェブサーバーである場合、ウェブサイトを監視し、ダウンしている場合に警告する無料のサービスがあります。ウェブを検索して無料のウェブサイト監視を検索します。
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ドキュメントに変更し、de phpスクリプトでデータベース接続、ファイルシステムなどのテストを行う場合、サーバーのより多くの側面をテストすることさえできます。そうすれば、マシンの予防的な監視を開始できます(サーバーがクラッシュする前に問題を確認してください)。
メールサーバーのチェックと同様ですが、Webページをリクエストする代わりに、メールサーバーを介してメールを送信し、メールボックスで受信するかどうかを確認します。
ここに私が同じ問題を解決した方法があります
#!/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
/usr/bin/mail -s "$SERVER went down" "$SENDEREMAIL" "$SMSEMAIL"
。