서버내부에서 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을 하더라도 프로세스가 종료가 안될 수 있습니다.


참조