반응형
#!/bin/sh
if [ -z "$1" ]
then
echo "사용법 : gracefulShutdown process"
exit
fi
target=$1
loop=1
limitLoop=30
ps -ef | grep $target | grep -v grep | grep -v vi | grep -v sh | awk '{ print $2 }' | \
while read PID
do
echo "[$PID] 프로세스에 종료 신호를 전송합니다."
kill -15 $PID
done
while [ $loop -le $limitLoop ]
do
PID_LIST=(`ps -ef | grep $target | grep -v grep | grep -v vi | grep -v sh | awk '{ print $2 }'`)
if [ ${#PID_LIST[@]} = 0 ]
then
echo "프로세스가 완전히 종료되었습니다."
exit
else
for pid in "${PID_LIST[@]}"
do
echo "[$loop/$limitLoop] $pid 프로세스 종료를 기다리는중입니다."
done
loop=$(( $loop + 1 ))
sleep 1
continue
fi
done
echo "!!! 대기시간이 만료되었습니다. 강제종료를 시도합니다. !!!"
ps -ef | grep $target | grep -v grep | grep -v vi | grep -v sh | awk '{ print $2 }' | \
while read PID
do
echo "[$PID] 프로세스에 강제종료 신호를 전송합니다."
kill -9 $PID
done
CentOS에서 톰캣을 종료할 때 ./shutdown.sh
명령어로 kill을 하는게 보통입니다.
하지만 저 명령어를 실행한다고해도 톰캣이 바로 죽지는 않습니다. 물론, 바로 죽을 때도 있지만 무언가를 수행하고 있을 경우에는 바로 죽지 않습니다. ./shutdown.sh
명령어는 단지 톰캣에 종료 신호를 보내는 것일 뿐입니다.
그래서 ./shutdown.sh
를 한 후에 바로 ./startup.sh
를 실행했을 경우에 이미 톰캣이 실행 중인 경우에는 해당 port가 사용중이여서 정상적으로 톰캣이 구동이 되지 않는 경우가 있습니다.
위의 소스코드를 스크립트 파일로 만든 후 실행하면 해당 프로세스(톰캣)이 죽을 때까지 기다립니다. 이 때, 지정한 시간(30초) 동안에 죽지 않았을 경우에는 kill -9 $PID
를 통해서 강제로 프로세스를 종료하게 됩니다. 강제로 프로세스를 종료하게 되었을 경우에는 작업 중이던 내용을 유실할 수 있음을 참고하세요.
반응형
'Programming > CentOS' 카테고리의 다른 글
[CentOS] JAVA 설치 (0) | 2021.07.16 |
---|---|
[CentOS] n일 지난 톰캣 로그 삭제 및 crontab 등록 (0) | 2021.07.15 |