배경 : 서버가 다운되면 경고를 받아야합니다. 서버가 다운되면 Sysload 콜렉터가 경보를 보낼 수 없습니다. 서버가 다운되었을 때 경고를 수신하기 위해 서버를 감지 할 외부 소스 (서버)가 있습니다.
질문 : 서버가 다운되었거나 오프라인 상태 일 때이를 감지하고 경고 메시지 (이메일 + SMS)를 보내는 방법 (bash 스크립트 선호)이 있습니까?
배경 : 서버가 다운되면 경고를 받아야합니다. 서버가 다운되면 Sysload 콜렉터가 경보를 보낼 수 없습니다. 서버가 다운되었을 때 경고를 수신하기 위해 서버를 감지 할 외부 소스 (서버)가 있습니다.
질문 : 서버가 다운되었거나 오프라인 상태 일 때이를 감지하고 경고 메시지 (이메일 + SMS)를 보내는 방법 (bash 스크립트 선호)이 있습니까?
답변:
확인 스크립트를 실행할 별도의 서버가있는 경우 다음과 같이 간단한 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를 사용하면 phonenumber @ txt.att.net으로 전자 메일을 보내면 전자 메일을 전화기로 보냅니다.
다음은 SMS 게이트웨이에 대한 전자 메일 목록입니다.
http://en.wikipedia.org/wiki/List_of_SMS_gateways
서버가 공개적으로 액세스 가능한 웹 서버 인 경우 웹 사이트를 모니터링하고 다운 된 경우 경고하는 무료 서비스가 있습니다. 웹 사이트에서 무료 웹 사이트 모니터링 을 검색하여 일부를 찾으십시오.
핑 (Ping)은 옵션이지만 대부분의 경우 실제 서버가 다운되는 동안 핑 응답을 보낼 수있는 경우가 많습니다. 종단 간 테스트를 수행하는 것이 좋습니다. 아래 예제에서 웹 서버에서 페이지가 요청됩니다.
웹 서버 인 경우 다음과 같습니다.
#!/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 스크립트 테스트를 수행하면 서버의 더 많은 측면을 테스트 할 수도 있습니다. 이렇게하면 시스템의 사전 모니터링을 시작할 수 있습니다 (서버가 충돌하기 전에 문제 참조).
메일 서버를 확인하는 것과 유사하지만 웹 페이지를 요청하는 대신 메일 서버를 통해 전자 메일을 보내면 사서함에서 메일을 받는지 확인할 수 있습니다.
동일한 문제를 해결하는 방법은 다음과 같습니다.
#!/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"
.