본문 바로가기
Server/서버 배포과정

SpringBoot 프로젝트 서버 배포하기 3 - 쉘 스크립트 파일로 서버 실행/끄기

by hhyyyjun 2024. 5. 22.

이번 포스팅은 쉘 스크립트를 이용하여 이전 포스트에서 사용했던 긴 명령어를 변수 활용 및 서버 실행을 순차적으로 하도록 만들어 실행할 것이다.

 

먼저 vi 명령어로 start.sh 쉘 스크립트 파일을 생성한다.

vi start.sh

그리고 권한을 부여해야 하는데,

chmod 755 start.sh

간단하게 설명하자면, chmod는 권한을 부여한다는 것이고, 뒤에 755는 사용자에겐 모든 권한을, 그룹사용자 및 기타 사용자는 읽기/실행 권한만 준다는 것이다.

 

위처럼 권한을 주게되면

요렇게 파일의 색깔이 변한다.

서버 명령어에 대한 포스팅은 따로 작성할 예정이다.

 

Start.sh

#!/bin/bash

SERVICE_NAME=security
PATH_TO_JAR=/data/security-0.0.1-SNAPSHOT.jar
PID_PATH_NAME=/data/security.pid

PORT=7878
APPLICATION_LOCAL=/data/application.yml
ENV_SET=local

JAVA_HOME=/data/jdk-11.0.22/bin/java

echo "==============================START============================="
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
               $JAVA_HOME -jar -Dserver.port=$PORT -Dspring.profiles.active=$ENV_SET $PATH_TO_JAR --spring.config.location=file:${APPLICATION_LOCAL} > nohup.out &
                        echo $! > $PID_PATH_NAME

            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
echo "================================================================"

 

간단하게 서버를 실행하는 쉘 스크립트를 작성해봤다.

먼저

1. PID_PATH_NAME은 security.pid 파일에 실행된 프로세스의 pid를 저장하도록 하여 해당 파일의 pid를 확인 후 이미 실행되고 있으면 실행하지 않도록 하였다.

2. 각각 변수를 두어 각 파일의 위치 혹은 포트, 환경을 작성하였다.

3. 실시간 로그를 확인하기 위해 nohup.out 파일에 로그가 쌓이도록 하였다.

4. 명령어 마지막에 & 를 작성하여 백그라운드에서 실행되도록 하였다,

 

쉘 스크립트 파일 실행은

./start.sh

파일 명 앞에 ./ 를 붙이면 된다.

실행을 하니 echo로 작성한 부분들이 출력되며

 

실행되는 프로세스를 확인하기 위해

ps -ef

명령어를 통해 확인하였다.

 

tail -f nohup.out

실시간 로그 확인하는 명령어를 통해 

 

서버가 정상적으로 실행되는 것을 확인했다. (api 호출에 따라 실시간 로그가 올라온다.)

 

또한

cat security.pid

cat 명령어를 통해 생성된 security.pid 파일에 작성된 프로세스 pid를 확인할 수 있었다.

 

Stop.sh

#!/bin/bash

SERVICE_NAME=security
PID_PATH_NAME=/data/security.pid
echo "===============================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
echo "================================================================"

stop 쉘 스크립트 파일은 비교적 간단하다.

저장된 security.pid의 pid 를 확인한 후 해당 pid 에 대한 프로세스가 실행되고 있다면 프로세스를 종료시키는 과정을 담았다.

똑같이 stop 스크립트를 실행하면

실행된 서버가 종료되며

프로세스를 확인했을 때 종료된것을 알 수 있다.

댓글