원문 : 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 30768
104 CentOS 6.5 환경에서 Multipath 구성하기 - 작성중 secret ischo 2014.08.05 0
103 CentOS에 zabbix 1.8.2 install secret 조인상 2010.07.27 2
102 [Shell] 시작한지 1시간 이상 경과한 프로세스 kill 하기 ischo 2022.06.16 263
101 Rocky 9+nginx1.20+php8+MariaDB 10.5 환경에서 wordpress 설치하기 ischo 2024.01.10 563
100 파일시스템 양방향 동기화하기 - rsync, lsyncd file ischo 2024.01.03 667
99 named 에서 DNS root 서버 리스트 갱신하기 ischo 2023.06.13 748
98 파일시스템 사용량 추이를 http 전송으로 DB에 누적하기 file ischo 2022.08.29 773
97 LVM 타입 swap 영역 용량 축소하기 ischo 2023.11.28 829
96 Multi Putty Manager file ischo 2020.10.08 916
95 vi 에디터에서 복사,붙여넣기 하면 # 마크가 자동으로 앞에 붙을때 ischo 2023.04.19 955
94 apache log4j 취약점 제거조치 CVE-2021-44228 CVE-2021-45046 CVE-2021-41045 CVE-2021-4104 ischo 2021.12.23 1081
93 구버전 Linux에서 Rocky Linux 9.1 버전으로 ssh 접속시 "no hostkey alg" 표시후 접속불가 ischo 2023.04.19 1502
92 CentOS 7에 Apache2, php7.3, MariaDB 설치하기 ischo 2019.09.02 1956
91 CIDR Conversion Table ischo 2018.03.08 2983
90 리눅스에서 Windows Filesystem(NTFS) 마운트하기 ischo 2018.12.20 3516
89 (스크립트) 오라클 DB서버에서 매일 원격지 FTP로 export 파일 업로드 하기 ischo 2017.11.04 4352
88 SFTP로 자동 업로드/다운로드 스크립트 ischo 2018.04.04 7405
87 apache 404 에러에 OS 또는 apache버전을 표시하는 취약점 없애기 ischo 2016.10.25 7717
86 APM 설치하기 조인상 2010.05.12 8062
85 iptables로 NAT + Portforwarding 구성하기 조인상 2010.05.12 8651
서버에 요청 중입니다. 잠시만 기다려 주십시오...