...
pid를 얻고 실행 여부를 확인하고 시그널을 보내는 등의 일련의 작업을 간단한 쉘 스크립트로 구현했으니 shutdown.sh 대신 사용해도 된다.(gist 링크)
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/bin/sh
killproc() {
local servicename=$1
local user=$2
local signal="TERM"
if [ "$#" = 0 ] ; then
echo $"Usage: killproc {servicename} {user} {signal}"
return 1
fi
if [ "$#" = 3 ]; then
signal=$3
fi
PIDS=`ps -eaf|grep ${servicename}|grep -v grep|grep ${user}|awk '{print $2}'`
## process still running..
for p in ${PIDS}
do
if [ ! -z ${p} ] && [ ${p} -gt 0 ];then
echo "kill -${signal} ${p}"
kill -${signal} ${p};
return $?;
else
return 0;
fi
done
}
## tomcat instance name. recommended tomcat running with custom property (aka -Dcom.example.servicename=myWebApp )
SERVICE_NAME=myWebApp
## tomcat home
TC_HOME=/var/tomcat/tomcat-7.0.55
if [ ! -d ${TC_HOME} ];then
TC_HOME=`pwd`
fi
## tomcat process owner name
USER=`whoami`
cd ${TC_HOME}
./bin/shutdown.sh >& /dev/null
sleep 1 # delay 1 sec for tomcat shutting down..
##
for i in 1 2;do
killproc ${SERVICE_NAME} ${USER}
RET=$?
if [ $RET = 0 ];then
break;
fi;
sleep $i;
done
## if still running send KILL signal
killproc "${SERVICE_NAME}" "${USER}" "KILL" |
젠킨스나 기타 지속적인 통합 솔루션에서 톰캣의 핫 디플로이 기능을 이용하여 어플리케이션을 배포할 경우 PermGen 에러가 발생하면 디플로이도 안 되고 톰캣이 제대로 종료되지 않는 경우가 발생한다.
...