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

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

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

 

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

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

 

프로세스 생사여부 검사후 메일보내는 쉘스크립트

 

먼저 해당 디렉토리의  proclist.txt 파일에 정의된 프로세스 리스트들을 읽어서

생사여부를 검사하고

죽은 프로세스가 있으면 메일로 보내주는 스크립트

 

완전하진 않지만 그럭저럭 쓸만함.

 

 

 

 

#!/bin/ksh

######################################################################################
# script by ischo.
# http://www.ischo.net
# mail:chosim1@naver.com
# script description :
# This script read first $PROG_HOME/proclist.txt file, then check process.
# If exist died process, make Mail Contents and send mail to $MAIL_RECIEVER
######################################################################################


######################################################################################
## ENVIRONMENT SETTING - You can edit this.
######################################################################################

# Absolute Path of script
PROG_HOME=/root/chkproc

# E-mail reciever
MAIL_RECIEVER=chosim1@naver.com

######################################################################################
######################################################################################

 

 

######################################################################################
# Variables for host environment - You do not need to edit.
######################################################################################

# ServerName : This setting will be included in SMS
SERVERNAME=`hostname`

# Config File List
MAILFILE=${PROG_HOME}/chkproc.mail
LOGFILE=${PROG_HOME}/chkproc_`date +%Y%m%d`.log
PROCLIST=${PROG_HOME}/proclist.txt
ALIVEFILE=${PROG_HOME}/alive_proclist.tmp
LASTSTATFILE=${PROG_HOME}/laststat.tmp
CURSTATFILE=${PROG_HOME}/curstat.tmp
TEMPSTATFILE=${PROG_HOME}/tempstat.tmp


# TIME mark VARS
STIME=`date +%Y%m%d%H%M%S`
TTIME=`date +%H:%M`
DDATE=`date +%Y%m%d`

# First VAR's value for Operation
ERROR=0
NOPROC=`cat ${PROCLIST} | wc -l`
Recover_stat="no"
Down_stat="no"

# First creation of LASTSTATFILE
if [ -f ${LASTSTATFILE} ];
then
        touch ${LASTSTATFILE}
else
        for TEMP in `cat ${PROCLIST}`
        do
        echo "${TEMP} : DOWN" >> ${LASTSTATFILE}
        done
fi

cat /dev/null > ${CURSTATFILE}

######################################################################################
######################################################################################

 

 

######################################################################################
# DEFINE FUNCTIONS
######################################################################################
# Function SendMail - Sending Mail of Error
function Func_SendMail
{


for PROCNAME in `cat ${PROCLIST}`
do

        CURRENT_STAT=`cat ${CURSTATFILE} | grep ${PROCNAME} | awk '{print $3}'`
        LAST_STAT=`cat ${LASTSTATFILE} | grep ${PROCNAME} | awk '{print $3}'`

        if [ ${CURRENT_STAT} = UP ];
        then
                if [ ${LAST_STAT} = DOWN ];
                then
                Recover_stat="yes"
                fi
                cat ${LASTSTATFILE} | grep -v ${PROCNAME} > ${TEMPSTATFILE}
                cat ${TEMPSTATFILE} > ${LASTSTATFILE}
                echo "${PROCNAME} : UP" >> ${LASTSTATFILE}
        else
                if [ ${LAST_STAT} = UP ];
                then
                Down_stat="yes"
                fi
                cat ${LASTSTATFILE} | grep -v ${PROCNAME} > ${TEMPSTATFILE}
                cat ${TEMPSTATFILE} > ${LASTSTATFILE}
                echo "${PROCNAME} : DOWN" >> ${LASTSTATFILE}
        fi

done

if [ ${Down_stat} = yes ];
then
mail -s "Process Down Alert!" ${MAIL_RECIEVER} < ${MAILFILE}
fi

if [ ${Recover_stat} = yes ];
then
echo "mail -s 'Process Recovered!' ${MAIL_RECIEVER} < ${MAILFILE}"
mail -s "Process Recovered!" ${MAIL_RECIEVER} < ${MAILFILE}
fi

}

 

# Function LogTop - Logging Number of Alive Processes
function Func_LogTop
{
NOP=0
cat /dev/null > ${ALIVEFILE}

for TEMP_PROC in `cat ${PROCLIST}`
do

        for REAL_PROC in `ps -ef | grep ${TEMP_PROC} | grep -v grep | awk {'print $8'} | sort | uniq`
        do
                if [ ${TEMP_PROC} = ${REAL_PROC} ];
                then
                ps -ef | grep ${TEMP_PROC} | grep -v grep | awk {'print $8'} | sort | uniq >> ${ALIVEFILE}
                NOP=`expr ${NOP} + 1`
                fi
        done

done

echo "${DDATE} ${TTIME}  Number of alive Processes : ${NOP}/${NOPROC}" >> ${LOGFILE}
}

 

# Function Logging - Log Process Check Result
function Func_Logging
{
echo "${DDATE} ${TTIME}  --Process ${PROC} Down" >> ${LOGFILE}
}


# Function LogBottom - Log Bottom Message
function Func_LogBottom
{
cat /dev/null > ${ALIVEFILE}

if [ ${ERROR} -eq 1 ];
then
echo "ps -ef result :" >> ${LOGFILE}
cat ${ALIVEFILE}  >> ${LOGFILE}
fi

}

 

#############################################################################################
#############################################################################################

 


#############################################################################################
# Main Procedure
# - Start Program
#############################################################################################

echo "-- ${DDATE} ${TTIME}  ${SERVERNAME} Process Check List --" > $MAILFILE


# Logging Number of Alive Processes
Func_LogTop


# Loop Process check and Log
for PROC in `cat $PROCLIST`
do

PROC_CHECK=`ps -ef | grep $PROC | grep -v grep | wc -l`
SEND_MSG=`echo "[critical] $SERVERNAME Process $PROC Down. $TTIME"`

        if [ $PROC_CHECK -eq 0 ];
        then

        echo "-- Process $PROC Down. ${TTIME}" >> $MAILFILE
        echo "${PROC} : DOWN" >> ${CURSTATFILE}
        Func_Logging
        ERROR=1

        else
        {
        echo "-- Process $PROC alive. ${TTIME}" >> $MAILFILE
        echo "${PROC} : UP" >> ${CURSTATFILE}
        }

        fi

done

# Send Mail
Func_SendMail


# Maintain Number of LOG files
find ${PROG_HOME} -name "*.log" -type f -mtime +5 -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 556
100 파일시스템 양방향 동기화하기 - rsync, lsyncd file ischo 2024.01.03 660
99 named 에서 DNS root 서버 리스트 갱신하기 ischo 2023.06.13 741
98 파일시스템 사용량 추이를 http 전송으로 DB에 누적하기 file ischo 2022.08.29 773
97 LVM 타입 swap 영역 용량 축소하기 ischo 2023.11.28 822
96 Multi Putty Manager file ischo 2020.10.08 916
95 vi 에디터에서 복사,붙여넣기 하면 # 마크가 자동으로 앞에 붙을때 ischo 2023.04.19 948
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 1494
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 3515
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 7713
86 APM 설치하기 조인상 2010.05.12 8062
85 iptables로 NAT + Portforwarding 구성하기 조인상 2010.05.12 8651
서버에 요청 중입니다. 잠시만 기다려 주십시오...