[WAS] tomcat이 메모리 부족으로 OOM Killer에 의해 중지될 때 톰켓 자동 재시작 하는 방법 ( 톰켓 여러개 일때 )
각 Tomcat이 다른 디렉토리에 있다는 가정하에, 디렉토리 기준으로 순회하면 됩니다.
아래는 /usr/local/ 안의 tomcat_* 폴더를 자동으로 찾아서, 죽은 것만 재시작하는 스크립트입니다.
완성 스크립트 (제외 목록 방식)
#!/bin/sh
Log=/usr/local/tomcat_monitor.log
DATE=`date +%Y%m%d-%H%M%S`
# ★ 제외할 톰캣 목록 (필요시 추가/수정)
EXCLUDE="tomcat_dev tomcat_test"
# /usr/local/ 아래 모든 tomcat_* 디렉토리 찾기
TOMACT_DIRS=$(ls -d /usr/local/tomcat_* 2>/dev/null)
if [ -z "$TOMACT_DIRS" ]; then
echo "$DATE : /usr/local/ 아래 tomcat_* 디렉토리가 없습니다." >> $Log
exit 1
fi
for CATALINA_HOME in $TOMACT_DIRS
do
NAME=$(basename $CATALINA_HOME)
# ★ 제외 목록에 있는 톰캣은 건너뜀
echo "$EXCLUDE" | grep -w "$NAME" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$DATE : [$NAME] 제외 대상 (모니터링 생략)" >> $Log
continue
fi
# 해당 톰캣 프로세스 확인 (경로 기준 정확 매칭)
PID=$(ps -ef | grep "[o]rg.apache.catalina.startup.Bootstrap" | grep "$CATALINA_HOME" | awk '{print $2}')
if [ -n "$PID" ]; then
echo "$DATE : [$NAME] 정상 작동 중 (PID: $PID)" >> $Log
else
echo "$DATE : [$NAME] 죽어있음! 재시작합니다..." >> $Log
$CATALINA_HOME/bin/startup.sh
sleep 5
NEW_PID=$(ps -ef | grep "[o]rg.apache.catalina.startup.Bootstrap" | grep "$CATALINA_HOME" | awk '{print $2}')
if [ -n "$NEW_PID" ]; then
echo "$DATE : [$NAME] 재시작 성공 (PID: $NEW_PID)" >> $Log
else
echo "$DATE : [$NAME] 재시작 실패!! 수동 확인 필요" >> $Log
fi
fi
sleep 2 # 톰캣 간 재시작 부하 방지
done
echo "##############################################################################" >> $Log
동작 방식
/usr/local/
├── tomcat_front → 죽으면 재시작
├── tomcat_admin → 정상이면 패스
├── tomcat_api → 죽으면 재시작
├── tomcat_web → 정상이면 패스
└── …
ls -d /usr/local/tomcat_* → tomcat_로 시작하는 모든 디렉토리 자동 탐색
사용 방법
1. 파일 저장
Shell
vi /usr/local/bin/tomcat_monitor.sh
2. 실행 권한 부여
Shell
chmod +x /usr/local/bin/tomcat_monitor.sh
3. 수동 실행 (테스트)
Shell
/usr/local/bin/tomcat_monitor.sh
4. 크론 등록 (5분마다)
Shell
crontab -e
Shell
*/5 * * * * /usr/local/bin/tomcat_monitor.sh > /dev/null 2>&1
설정 변경 포인트
| 항목 | 위치 | 설명 |
|---|---|---|
| 제외 목록 | EXCLUDE="..." | 공백으로 구분, 추가/삭제 자유 |
| 로그 파일 | Log= 줄 | 원하는 경로로 변경 가능 |
| 재시작 대기 시간 | sleep 5 | 톰캣 기동 시간에 맞게 조정 |
| 톰캣 간 간격 | sleep 2 | 7개 동시 재시작 시 부하 방지 |
로그 예시
Plaintext
20260901-103000 : [tomcat_front] 정상 작동 중 (PID: 12345)
20260901-103000 : [tomcat_admin] 정상 작동 중 (PID: 12346)
20260901-103000 : [tomcat_test] 제외 대상 (모니터링 생략)
20260901-103000 : [tomcat_api] 죽어있음! 재시작합니다...
20260901-103010 : [tomcat_api] 재시작 성공 (PID: 22345)
##############################################################################
제외 목록에 추가로 필요한 톰캣이 있으면 EXCLUDE에 넣기만 하면 됩니다.
[연관자료]
- [WAS] tomcat이 메모리 부족으로 OOM Killer에 의해 중지될때 톰켓 자동 재시작 하는 방법
- 서버에 톰캣 1개만 설치되어 있는 경우 => [Tomcat] 톰캣 실행여부 확인 및 시작 Shell Script



