본문 바로가기
실습/리눅스 서버 + 스프링 부트

[Shell Script] 프로그램 실행/종료 스크립트 만들기

by 이민우 2022. 9. 18.
728x90
반응형

다음 포스팅에서 이어진다.

https://123okk2.tistory.com/387

 

[Shell Script] 쉘 스크립트 문법

쉘 스크립트의 최상단은 다음과 같은 명령어로 시작되어야 한다. #!/bin/sh 해당 명령어는 스크립트를 실행할 쉘을 지정하는 문법이다. 이제부터 쉘 스크립트의 사용법을 간략하게 적어보고자 한

123okk2.tistory.com

 

 

프로그램을 만들었으면 클라이언트 혹은 서버에 해당 프로그램을 배포해야 한다.

하지만 동일 프로그램을 실행시키더라도 실행하는 환경에 따라 application.properties (혹은 yml), bootstrap.properties 등의 설정 파일의 값은 바뀌어야 한다.

 

물론 이 부분은 윈도우는 7Zip등을 통해, 리눅스는 vim 등을 통해 얼마든지 수정은 가능하지만, 실행 스크립트를 만들어놓으면 보다 쉽게 이러한 환경 설정값들을 수정할 수 있다.

 

금주만 해도 7개 모듈에 대한 실행 스크립트를 제작했다. 하지만 스크립트를 제작할 때마다 직전에 작성한 스크립트를 참고하여 제작하는 내 모습을 보고, 까먹지 않기 위해 스크립트 제작 방법을 기재해놓을까 한다.

 

 


 

먼저 스크립트로 실행할 프로그램이 필요하다.

 

간단하게 MariaDB에서 특정 테이블 데이터를 GET 할 수 있는 프로그램을 제작한다.

 

위 프로그램의 동작을 위해서는 아래와 같은 설정 값들이 필요하다.

server.address=0.0.0.0
server.port=8080

#Log 설정
logging.level.root=info
logging.file.path=/logs

#JPA 설정
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

#MariaDB 설정
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://xxx.xxx.xxx.xxx:3306/scriptTest?allowMultiQueries=true&useOldAliasMetadataBehavior=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=0000

 

이 중 환경에 따라 달라지는 설정값들을 선택한다. 위 프로그램에서는 server.address를 제외한 모든 설정 값들이 환경에 따라 변경되어야 할 것으로 보인다.

 

그러면 이제 변경되어야 할 값들을 쉘 스크립트에서 변수로 선언하고, 각 변수들을 java -jar 명령어 실행 시 옵션으로 넣어주면 된다.

 

예시는 아래와 같다.

#!/bin/sh

## 1. 파라미터 확인
if [ -z $1 ]; then
        echo "enter command"
        echo "ex) ./run.sh {start|stop}"
        exit
fi

## 2. 변수 설정 (배포 시 변경해야 하는 값)
#jar 파일 경로 및 이름
JAR_PATH=/app
JAR_FILE=proxyTest-0.0.1-SNAPSHOT.jar

#PORT 설정 관련 변수
PORT=8080

#LOG 설정 관련 변수
LOG_LEVEL=DEBUG
LOG_PATH=$JAR_PATH/logs

#JPA 설정 관련 변수
SHOW_SQL_LOG=true
DDL_AUTO=update

#DB 설정
DB_CLASS=org.mariadb.jdbc.Driver
DB_URL=jdbc:mariadb://xxx.xxx.xxx.xxx:3306/scriptTest?allowMultiQueries=true&useOldAliasMetadataBehavior=true&useSSL=false
DB_USER=root
DB_PASSWORD=0000

## 3. 프로그램 실행
# 기본 옵션 설정
JAVA_OPT="-Xmx64m -Xmx256m "

# 포트 설정
JAVA_OPT=$JAVA_OPT" -Dserver.port=$PORT"

# 로그 설정
JAVA_OPT=$JAVA_OPT" -Dlogging.level.root=$LOG_LEVEL -Dlogging.file.path=$LOG_PATH"

# JPA 설정
JAVA_OPT=$JAVA_OPT" -Dspring.jpa.show-sql=$SHOW_SQL_LOG -Dspring.jpa.hibernate.ddl-auto=$DDL_AUTO"

# DB 설정
JAVA_OPT=$JAVA_OPT" -Dspring.datasource.driverClassName=$DB_CLASS -Dspring.datasource.url=$DB_URL -Dspring.datasource.username=$DB_USER -Dspring.datasource.password=$DB_PASSWORD"


case $1 in
        start)
                echo "start application"
                nohup java $JAVA_OPT -jar $JAR_PATH/$JAR_FILE > /dev/null 2> /dev/null &

                # PID 저장
                echo $! > $JAR_PATH/application.pid
                echo "application started"
        ;;
        stop)
                # 프로그램이 실행중이 아니면 종료
                if [ -f $JAR_PATH/application.pid ]; then
                        echo "stop application"
                        # Process ID 식별
                        PID=`cat $JAR_PATH/application.pid`
                        echo "application is running as $PID"
                        # 종료
                        kill $PID
                        echo "application stopped"
                        # pid 파일 삭제
                        rm /$JAR_PATH/application.pid
                else
                        echo "application not running"
                fi
        ;;
esac

 

이제 /app 폴더에 logs폴더를 만들고 run.sh 스크립트 파일과 jar 파일을 넣은 후 아래 명령어를 통해 프로그램을 켜고 끌 수 있다.

./run.sh start
./run.sh stop

 

그리고 설정값에 따라 /app/logs 내부에 spring.log라는 이름으로 로그 파일이 생성되어 로그가 저장된다.

물론 로그 파일명과 로그로테이션 설정은 로그백 설정을 통해 별도로 가능하다.

 

728x90
반응형

'실습 > 리눅스 서버 + 스프링 부트' 카테고리의 다른 글

application.yml 적용법  (0) 2023.01.15
JPA에서 외래키 사용  (0) 2022.12.13
[Shell Script] 쉘 스크립트 문법  (0) 2022.08.16
JPA 페이징  (0) 2022.07.25
application.properties (yml) 암호화  (0) 2022.07.25