리눅스 시스템에서 web/was 인스턴스 체크를 하기 위한 쉘 스크립트 입니다. 사용하는 시스템에 맞게 수정해서 사용하면 도움이 될것 같습니다. 본 스크립트는 하나의 리눅스 시스템에 apache와 tomcat이 연동되어 구성되어 있는 환경에서 작성한 것으로 본인이 환경에 맞게 응용해서 사용 하시면 좋을 것 같습니다.
목차
- 1. PSEF_CODE 함수
- 2. GREP_PROC 함수
- 3. ChkOK 함수
- 4. ChkProcCnt 함수
- 5. CntIP 함수
- 6. ChkListenPort 함수
- 7. 스크립트 실행부
- 8. 결과
- 9. 전체소스
1. PSEF_CODE 함수
function PSEF_CODE {
# 1.1.0
if [ $# -eq 0 ]; then
# 현재 프로세스 목록에서 'ps -ef'와 'grep -iy'를 필터링하는 부분입니다.
ps -ef | grep -iyv "ps -ef" | grep -v "grep -iy"
else
case $1 in
PID)
shift
# 재귀적으로 PSEF_CODE 함수를 호출하고, 결과에서 프로세스 ID만 추출합니다.
PSEF_CODE $* | awk '{print $2}'
;;
USER)
shift
USERNAME="$1"; shift
# 재귀적으로 PSEF_CODE 함수를 호출하고, 사용자명에 대소문자 무시 조건을 적용합니다.
PSEF_CODE $* | awk -v USERNAME=$USERNAME 'tolower($1) == tolower(USERNAME)'
;;
PROC)
shift
STR="$1"; shift
# 재귀적으로 PSEF_CODE 함수를 호출하고, 지정된 프로세스 이름에 대소문자 무시로 검색합니다.
PSEF_CODE $* | grep -iy "$STR"
;;
COUNT)
shift
# 재귀적으로 PSEF_CODE 함수를 호출하고, 결과의 라인 수를 세어줍니다.
PSEF_CODE $* | wc -l
;;
esac
fi
}
awk 명령어를 사용하여 프로세스 목록을 필터링하고, 대소문자 무시를 적용하여 일치하는 결과를 반환.
2. GREP_PROC 함수
function GREP_PROC {
# version 1.3.0
PID_OPT=""
USER_OPT=""
USER_NAME=""
while [ $# -gt 0 ]; do
case $1 in
-c)
shift
# COUNT 옵션을 CMD_LIST에 추가합니다.
CMD_LIST="COUNT ${CMD_LIST}"
;;
-P)
shift
# PID 옵션을 CMD_LIST에 추가합니다.
CMD_LIST="PID ${CMD_LIST}"
;;
-u)
shift
USERNAME=$1; shift
# USER 옵션을 CMD_LIST에 추가하고, 사용자명을 함께 기록합니다.
CMD_LIST="${CMD_LIST} USER $(USERNAME)"
;;
*)
# 나머지 옵션은 PROC로 간주하고 CMD_LIST에 추가합니다.
CMD_LIST="${CMD_LIST} PROC $1"
shift
;;
esac
done
# CMD_LIST에 있는 PID와 COUNT의 순서를 바꿔줍니다.
CMD_LIST=$(echo $CMD_LIST | sed 's/PID COUNT/COUNT PID/g')
# 최종적으로 PSEF_CODE 함수를 호출하여 결과를 반환합니다.
PSEF_CODE ${CMD_LIST}
}
스크립트 옵션에 따라 CMD_LIST에 적절한 옵션을 추가하고, 이를 PSEF_CODE 함수에 전달 합니다.
3. ChkOK 함수
function ChkOK {
# 1.0.0
PARAM_MSG="$1"; shift
RESULT=$1; shift
RESULT_LIMIT_LOW=$1; shift
RESULT_LIMIT_HIGH=$1; shift
MSG="$@"
printf "${PARAM_MSG} : "
# 주어진 조건에 따라 결과를 판단하여 메시지를 출력합니다.
[ ${RESULT} -ge ${RESULT_LIMIT_LOW} -a ${RESULT} -le ${RESULT_LIMIT_HIGH} ] && echo "[ OK ]" || echo "[ FAIL : ${MSG} ]"
}
결과를 평가하고 메시지를 출력하는 로직 입니다.
4. ChkProcCnt 함수
function ChkProcCnt {
# 1.1.0
OWNER="$1"; shift
PROC="$1"; shift
SUB_PROC="$1"; shift
CNT_MIN=$1; shift
CNT_MAX=$1; shift
printf "${PROC}(${SUB_PROC}) : "
# PSEF_CODE 함수를 사용하여 프로세스 카운트를 가져오고, 주어진 범위 내에 있는지 확인합니다.
PROC_CNT=$(PSEF_CODE COUNT USER ${OWNER} PROC "${PROC}" PROC "${SUB_PROC}")
[ ${PROC_CNT} -ge ${CNT_MIN} -a ${PROC_CNT} -le ${CNT_MAX} ] && echo "[ OK ]" || echo "[ FAIL : Process count out of range ]"
}
PSEF_CODE 함수를 사용하여 프로세스 카운트를 가져오고, 주어진 범위 내에 있는지 확인 합니다.
5. CntIP 함수
function CntIP {
# usage: CntIP IP
IP=$1
# ifconfig 결과에서 해당 IP를 찾아서 라인 수를 세어 반환합니다.
echo $(ifconfig -a | grep -iy " ${IP} " | grep -v "grep -iy" | wc -l)
}
ifconfig 결과에 해당 IP를 찾아서 라인 수를 세어 반환 합니다.
6. ChkListenPort 함수
function ChkListenPort {
NAME=$1; shift
PORT=$1; shift
MSG=$*
printf "Listening Port (${NAME}:${PORT}) : "
# netstat 결과에서 LISTEN 상태인 해당 포트가 있는지 확인하여 메시지를 출력합니다.
FLAG=$(netstat -an | grep LISTEN | grep ":${PORT} " | wc -l)
[ ${FLAG} -eq 1 ] && echo "[ OK ]" || echo "[ FAIL : ${MSG} ]"
}
netstat 결과에서 LISTEN 상태인 해당 포트가 있는지 확인하여 메시지를 출력합니다.
7. 스크립트 실행부
echo "***** Tomcat instance *****"
# www 사용자의 tomcat java 프로세스 카운트 확인
ChkProcCnt www tomcat java 1 1 "root) cd /root; /Startstart.sh"
# 8080 포트의 tomcat이 LISTEN 상태인지 확인
ChkListenPort "tomcat" 8080
echo
echo '***** Apache instance *****'
# root 사용자의 apache httpd 프로세스 카운트 확인
ChkProcCnt root apache httpd 1 1 "root) cd /root; ./Startstart.sh"
# 80 포트의 apache가 LISTEN 상태인지 확인
ChkListenPort "apache" 80
Tomcat instance 와 Apache instance에 대해 각각 프로세스 카운트와 LISTEN 포트 여부를 확인하는 부분입니다.
8. 결과
스크립트 실행 결과
인스턴스가 정상적으로 실행 되어 있다면 [OK] 로 확인 되고, 정지 중 이라면 [FAIL]로 확인 됩니다.
9. 전체 소스
#!/bin/bash
function PSEF_CODE {
# 1.1.0
if [ $# -eq 0 ]; then
ps -ef | grep -iyv "ps -ef" | grep -v "grep -iy"
else
case $1 in
PID)
shift
PSEF_CODE $* | awk '{print $2}'
;;
USER)
shift
USERNAME="$1"; shift
PSEF_CODE $* | awk -v USERNAME=$USERNAME 'tolower($1) == tolower(USERNAME)'
;;
PROC)
shift
STR="$1"; shift
PSEF_CODE $* | grep -iy "$STR"
;;
COUNT)
shift
PSEF_CODE $* | wc -l
;;
esac
fi
}
function GREP_PROC {
# version 1.3.0
PID_OPT=""
USER_OPT=""
USER_NAME=""
while [ $# -gt 0 ]; do
case $1 in
-c)
shift
CMD_LIST="COUNT ${CMD_LIST}"
;;
-P)
shift
CMD_LIST="PID ${CMD_LIST}"
;;
-u)
shift
USERNAME=$1; shift
CMD_LIST="${CMD_LIST} USER $(USERNAME)"
;;
*)
CMD_LIST="${CMD_LIST} PROC $1"
shift
;;
esac
done
CMD_LIST=$(echo $CMD_LIST | sed 's/PID COUNT/COUNT PID/g')
PSEF_CODE ${CMD_LIST}
}
function ChkOK {
# 1.0.0
PARAM_MSG="$1"; shift
RESULT=$1; shift
RESULT_LIMIT_LOW=$1; shift
RESULT_LIMIT_HIGH=$1; shift
MSG="$@"
printf "${PARAM_MSG} : "
[ ${RESULT} -ge ${RESULT_LIMIT_LOW} -a ${RESULT} -le ${RESULT_LIMIT_HIGH} ] && echo "[ OK ]" || echo "[ FAIL : ${MSG} ]"
}
function ChkProcCnt {
# 1.1.0
OWNER="$1"; shift
PROC="$1"; shift
SUB_PROC="$1"; shift
CNT_MIN=$1; shift
CNT_MAX=$1; shift
printf "${PROC}(${SUB_PROC}) : "
PROC_CNT=$(PSEF_CODE COUNT USER ${OWNER} PROC "${PROC}" PROC "${SUB_PROC}")
[ ${PROC_CNT} -ge ${CNT_MIN} -a ${PROC_CNT} -le ${CNT_MAX} ] && echo "[ OK ]" || echo "[ FAIL : Process count out of range ]"
}
function CntIP {
# usage: CntIP IP
IP=$1
echo $(ifconfig -a | grep -iy " ${IP} " | grep -v "grep -iy" | wc -l)
}
function ChkListenPort {
NAME=$1; shift
PORT=$1; shift
MSG=$*
printf "Listening Port (${NAME}:${PORT}) : "
FLAG=$(netstat -an | grep LISTEN | grep ":${PORT} " | wc -l)
[ ${FLAG} -eq 1 ] && echo "[ OK ]" || echo "[ FAIL : ${MSG} ]"
}
echo "***** Tomcat instance *****"
ChkProcCnt www tomcat java 1 1 "root) cd /root; /Startstart.sh"
ChkListenPort "tomcat" 8080
echo
echo '***** Apache instance *****'
ChkProcCnt root apache httpd 1 1 "root) cd /root; ./Startstart.sh"
ChkListenPort "apache" 80
전체 스크립트 소스입니다. 본인의 환경에 맞게 수정하여 사용하면 좋을 것 같습니다.
'투윤아빠의 올IT' 카테고리의 다른 글
가성비 노트북 레노버(Lenovo)씽크북 15 G4-ABA-21DL004RKR 내돈내산 언박싱 (0) | 2023.11.30 |
---|---|
갤럭시S24 출시일 / 스펙 / 가격 / 신기능 삼성 생산형AI 가우스 탑재에 대해 알아보기 (0) | 2023.11.28 |
배치파일(bat)을 이용한 윈도우 서비스, Task 점검 스크립트 / 자동화 / 점검 스크립트 만들기. (1) | 2023.11.27 |
선택 장애를 위한 갤럭시북3 프로 VS LG그램 2023 16인치 비교/대학생 노트북 추천/ 쉽게 비교해 보기 (0) | 2023.11.26 |
시스템 포트체크 배치 스크립트 / 응답시간 포함 / PowerShell 활용 / port check script (1) | 2023.11.22 |