원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

스크립트명 : chk_port.sh

스크립트목적 : 복수 서버들의 서비스 리스트를 작성 (server.list)

                            server.list 의 목록에 있는 서비스포트들의 응답여부를 점검하여 죽거나 복구된 서버들의 리스트를

                            지정된 메일로 보내준다.

 

환경파일 작성방법(server.list)

형식) <서버명칭> <호스트이름> <서버IP> <서비스포트>        : 필드구분은 스페이스바로 구분

WEBSERVER test_web 192.168.10.1 80

DBSERVER test_db 192.168.10.2 1521

WEBSERVER2 test_web2 192.168.10.3 8080

DBSERVER2 test_db2 192.168.10.4 1522

 

 

 

#!/bin/ksh
######################################################################################
# script by ischo.
# http://www.ischo.net
# mail:chosim1@naver.com
# script description :
# Send mail to ${MAILADDR} if ${TARGET_SERVER}'s ${SERVER_PORT} port disabled
######################################################################################

# for time check
STIME=`date +%Y%m%d%H%M%S`
MTIME=`date +%H:%M`
DDATE=`date +%Y%m%d`
HTIME=`date +%H`

# Set Environment
MAILADDR=chosim1@naver.com
PROGHOME=/home/admin/chk_port
LISTFILE=${PROGHOME}/server.list
LOGFILE=${PROGHOME}/server_${DDATE}.log
MAILFILE=${PROGHOME}/mail.txt
STATDIR=${PROGHOME}/stat


# initial set
if [ ! -d ${STATDIR} ];
then
        mkdir ${STATDIR}
fi
cat /dev/null > ${MAILFILE}
MAX_ROW=`cat ${LISTFILE} | wc -l`
CURRENT_ROW=1

#############################################################################################
## START MAIN PROCEDURE
#############################################################################################

while [ ${CURRENT_ROW} -le ${MAX_ROW} ];
do

ROW_CONTENT=`cat ${LISTFILE} | head -${CURRENT_ROW} | tail -1`

SERVER_NAME=`echo ${ROW_CONTENT} | awk {'print $1'}`
HOST_NAME=`echo ${ROW_CONTENT} | awk {'print $2'}`
SERVER_IP=`echo ${ROW_CONTENT} | awk {'print $3'}`
SERVER_PORT=`echo ${ROW_CONTENT} | awk {'print $4'}`
STATFILE=${STATDIR}/${SERVER_NAME}.stat
if [ ! -f ${STATFILE} ];
then
        echo "0" > ${STATFILE}
fi


# Check server port
telnet ${SERVER_IP} ${SERVER_PORT} << !

quit
!

##################################################################################################################
# Check port and compare before status -> Logging
if [ $? -eq 0 ];
then

        if [ `cat ${STATFILE}` -eq $? ];
        then
                echo "A L I V E : ${DDATE} ${MTIME} ${SERVER_NAME} (${HOST_NAME})-${SERVER_IP}:${SERVER_PORT}" >> ${LOGFILE}
        else
                echo "!RECOVERED: ${DDATE} ${MTIME} ${SERVER_NAME} (${HOST_NAME})-${SERVER_IP}:${SERVER_PORT}" >> ${LOGFILE}
                echo "!RECOVERED: ${DDATE} ${MTIME} ${SERVER_NAME} (${HOST_NAME})-${SERVER_IP}:${SERVER_PORT}" >> ${MAILFILE}
                echo 0 > ${STATFILE}
                TRIGER_CHANGED=1
        fi

else

        if [ `cat ${STATFILE}` -eq $? ];
        then
                echo "! D O W N : ${DDATE} ${MTIME} ${SERVER_NAME} (${HOST_NAME})-${SERVER_IP}:${SERVER_PORT}" >> ${LOGFILE}
                echo "! D O W N : ${DDATE} ${MTIME} ${SERVER_NAME} (${HOST_NAME})-${SERVER_IP}:${SERVER_PORT}" >> ${MAILFILE}
                echo 1 > ${STATFILE}
                TRIGER_CHANGED=1

        else
                echo "STIL DOWN : ${DDATE} ${MTIME} ${SERVER_NAME} (${HOST_NAME})-${SERVER_IP}:${SERVER_PORT}" >> ${LOGFILE}
        fi
fi
##################################################################################################################


CURRENT_ROW=`expr ${CURRENT_ROW} + 1`

done

echo >> ${LOGFILE}


# Sendmail if port status changed ################################################################################
if [ ${TRIGER_CHANGED} -eq 1 ];
then
        mail -s "KGC server Event !!!" ${MAILADDR} < ${MAILFILE}
fi
##################################################################################################################


find ${PROGHOME} -name "server*.log" -type f -mtime +15 -exec rm {} \;

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 게시자료 열람자유. 불펌금지입니다. 조인상 2010.12.07 30736
64 kill 명령어로 줄수 있는 interrupt list ischo 2012.08.17 12518
63 apache log rotate 시키기 ischo 2012.08.14 17141
62 DNS 기초에서 보안까지 조인상 2012.07.26 11410
61 아파치. 톰캣 연동 (apache+tomcat by mod_jk) ischo 2012.04.18 17320
60 SELINUX 비활성화하기 ischo 2012.04.06 15856
59 CentOS 6 에서 XDMCP 활성화 방법 ischo 2012.02.25 15220
58 리눅스 커널이 64bit 인지 확인방법 ischo 2012.02.24 34978
» 복수서버들의 서비스포트 응답여부를 확인하여 메일로 보내주는 스크립트 file ischo 2012.01.17 14649
56 리눅스에서 디스크 덤프하기 ischo 2011.12.22 21866
55 telnet 으로 메일 보내기 ischo 2011.12.07 14387
54 웹서버 포트 무응답시 메일 보내주는 스크립트 file ischo 2011.11.30 11007
53 Shell 스크립트의 내장변수 + exit code ischo 2011.11.16 16827
52 프로세스 생사여부 검사후 메일보내는 쉘스크립트 file ischo 2011.11.10 13544
51 TCP/IP Flow file ischo 2011.10.19 11570
50 ssh 접속시 로그인 속도가 느릴경우 속도 향상법 ischo 2011.08.30 22993
49 백그라운드로 프로세스 실행시키기 ischo 2011.08.25 14803
48 TCP TIME_WAIT이 많이 발생하여 문제가 되는 경우 ischo 2011.08.18 28326
47 리눅스 mdadm 을 이용한 S/W RAID 구성 [1] ischo 2011.07.20 25432
46 리눅스 Services 설명 ischo 2011.07.08 23634
45 아파치 SSL 적용된 경우 startup 시에 SSL 패스워드 자동입력시키기 ischo 2011.06.02 24244
서버에 요청 중입니다. 잠시만 기다려 주십시오...