원문 : 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 30767
64 mysql 4 버전 설치하기 조인상 2010.05.12 11670
63 파이프를 이용한 tar와 gzip 동시에 처리하기 ischo 2011.05.19 12082
62 시스템 관리자를 위한 50가지 비법 조인상 2011.01.04 12212
61 리눅스에서 2TB 이상의 파티션 만들기 ischo 2011.04.11 12258
60 xinetd 모드로 proftpd 변경 조인상 2010.05.12 12364
59 터미널에서 한글을!! Unicon 소개/설치 조인상 2010.05.12 12369
58 kill 명령어로 줄수 있는 interrupt list ischo 2012.08.17 12529
57 2G이상 파일 tar 로 생성 / 분할생성(복사) 조인상 2010.05.12 12997
56 sendmail 기반의 Squirrelmail (다람쥐메일)설치기법 조인상 2010.05.12 13170
55 case로 만드는 오라클 서비스 관리 ksh 스크립트 예제 ischo 2010.06.18 13494
54 프로세스 생사여부 검사후 메일보내는 쉘스크립트 file ischo 2011.11.10 13552
53 OpenSSL 다중취약점 보안업데이트 [1] ischo 2015.04.02 13658
52 ubuntu 에서 /boot 파일시스템 full 날 경우 이미지 삭제방법 ischo 2014.05.12 14065
51 불특정 파일리스트 FTP 전송 스크립트 file ischo 2011.02.18 14179
50 telnet 으로 메일 보내기 ischo 2011.12.07 14394
49 NFS 관련 명령어 및 파일들 조인상 2010.05.12 14450
48 리눅스환경에서 RedOwl 정지시키기 조인상 2010.05.27 14477
» 복수서버들의 서비스포트 응답여부를 확인하여 메일로 보내주는 스크립트 file ischo 2012.01.17 14656
46 shell script를 cron으로 동작시킬때 .bashrc .bash_profile의 변수가 적용되지 않는다 ischo 2017.09.08 14789
45 백그라운드로 프로세스 실행시키기 ischo 2011.08.25 14814
서버에 요청 중입니다. 잠시만 기다려 주십시오...