서버내부에서 helthcheck 서버를 구성할 때 처리할 때, 특정폴더에 올라간 jar 파일을 가지고, 서버를 실행시키거나, 중지시키는 용도의 shell script 입니다.
#!/bin/sh
SERVICE_NAME=healthcheck
PATH_TO_JAR=/home/users/deploy/healthcheck.jar
PID_PATH_NAME=/tmp/healthcheck-pid
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is already running ..."
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
else
echo "$SERVICE_NAME is not running ..."
fi
;;
esac
start 할 때, pid 를 특정 파일에 저장하며, stop 할때 해당 pid를 kill 합니다. 자주 사용하는 기능으로, pid를 저장함으로써 다시 실행하거나 중지할때 해당 파일을 kill 합니다.
이 스크립트의 문제는 별도의 서비스를 통해, 프로세스가 kill 되었을 때, 혹은 pid 파일이 삭제되면, stop을 하더라도 프로세스가 종료가 안될 수 있습니다.