본문 바로가기

- others

[Bash] jar파일 실행(내장 톰캣)

반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/sh
SERVICE_NAME=HALF-JANG-API
PATH_TO_JAR=/app/ua_api/HALF-JANG-API-1.0.0.jar
PID_PATH_NAME=./HALF-JANG-API.pid
JAVA_OPT="-Xms1024m -Xmx1024m"
PROFILES_ACTIVE=dev
 
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
            nohup java -jar -Dspring.profiles.active=$PROFILES_ACTIVE $JAVA_OPT $PATH_TO_JAR &
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;
    run)
        if [ ! -f $PID_PATH_NAME ]; then
            java -jar -Dspring.profiles.active=$PROFILES_ACTIVE $JAVA_OPT $PATH_TO_JAR
        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
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            kill $PID;
            echo "$SERVICE_NAME stopped ...";
            rm $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            nohup java -jar -Dspring.profiles.active=$PROFILES_ACTIVE $JAVA_OPT $PATH_TO_JAR &
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
esac

 

젠킨스가 적용되지 않은 서버에서 부트로 개발된 API를 구동시킬 일이 생겼습니다.

오랜만에 쉘을 짜려니 기억이 가물가물...

 

1개 이상 사용해야되는 값들은 변수로 상단에 선언

  • SERVICE_NAME=HALF-JANG-API
  • PATH_TO_JAR=/app/ua_api/HALF-JANG-API-1.0.0.jar
  • PID_PATH_NAME=./HALF-JANG-API.pid
  • JAVA_OPT="-Xms1024m -Xmx1024m"
  • PROFILES_ACTIVE=dev

시작, 중지, 재시작

  • case $1 in    -> case문으로 분기, $1은 쉘 뒤에 입력하는 값(ex. $./run.sh start)
  • echo    -> 콘솔에 출력
  • if [ !-f $PID_PATH_NAME ]; then    -> PID 체크(중복실행 방지)
  • nohup ~ &    -> 백그라운드로 실행, &로 명령어 끝 명시(nohup 명령어를 사용하지 않으면 쉘 명령어 종료 시 프로세스 종료)
  • java -jar -Dspring.profiles.active=$PROFILES_ACTIVE $JAVA_OPT $PATH_TO_JAR    -> jar 실행, 변수로 환경, 자바옵션, jar경로 지정
  • run)    -> 정상적으로 실행되지 않을 때 로그를 실시간으로 보기 위함(nohup 명령어 미사용)
  • if [ -f $PID_PATH_NAME ]; then    -> PID 체크(종료 시)
  • kill $PID;    -> 프로세스 종료

* 추가

  • nohup java -jar -Dspring.profiles.active=prod $JAVA_OPT $PATH_TO_JAR >> $PATH_TO_LOG/hafl_jang.log
  • -> logback 설정이 없을 때 위와 같이 로그 출력도 지정 가능

 

 

반응형