티스토리 뷰
반응형
현재 젠킨스로 배치를 배포하며 특정 서버에 SSH 연결을 통해 jar 파일을 실행하는 구조로 배치가 수행되고 있습니다. 서버간 파일 이동을 줄이기 위해 타겟 서버에 Git Repository Clone을 진행해두고 그 상태에서 프로젝트를 자체 gradle build 를 통하여 jar 를 생성하고 있었습니다.
문제는 아래와 같이 로그가 jar 파일 실행 이후에도 로그가 계속 출력되고 있어서 젠킨스 아이템이 멈추지 않는 증상이었습니다.
그래서 이 부분을 어떻게 해결할지 고민을 하다가 백그라운드에서 배치를 실행시키는 옵션을 찾게되었습니다.
기존에 사용하였던 run.sh 의 내용입니다.
As-is
!#/bin/sh
port=18085;
pid="$(sudo lsof -t -i :18085 -s TCP:LISTEN)";
module="Estate Batch";
if [ "$pid" != "" ]; then
sudo kill -9 $pid;
echo "$module $pid process kill complete"
else
echo "$module pid is empty"
fi
cd /home/ec2-user/프로젝트명
git pull
./gradlew clean build -x test
cd /home/ec2-user/프로젝트명/build/libs
PLAIN_JAR=$(sudo ls -ef | grep 'plain')
echo "${PLAIN_JAR}"
rm -rf ${PLAIN_JAR}
java --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -Duser.timezone=Asia/Seoul -Dspring.profiles.active=scrap -jar *.jar
그래서 맨 하단의 java 실행 옵션에 nohup 명령어를 주고 맨 끝쪽에 옵션을 걸었더니 정상적으로 종료되는 것을 확인할 수 있었습니다.
To-Be
!#/bin/sh
port=18085;
pid="$(sudo lsof -t -i :18085 -s TCP:LISTEN)";
module="Estate Batch";
if [ "$pid" != "" ]; then
sudo kill -9 $pid;
echo "$module $pid process kill complete"
else
echo "$module pid is empty"
fi
cd /home/ec2-user/프로젝트명
git pull
./gradlew clean build -x test
cd /home/ec2-user/프로젝트명/build/libs
PLAIN_JAR=$(sudo ls -ef | grep 'plain')
echo "${PLAIN_JAR}"
rm -rf ${PLAIN_JAR}
nohup java --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -Duser.timezone=Asia/Seoul -Dspring.profiles.active=scrap -jar *.jar > /dev/null 2>&1 &
참조: https://oingdaddy.tistory.com/94
반응형
'Server' 카테고리의 다른 글
유료로 대체되는 Docker Desktop 대체하기 (0) | 2022.10.06 |
---|---|
[Java] JPA 복합키의 장점과 단점 알아보기 (0) | 2022.10.02 |
[Java] 소수점 처리하기 (0) | 2022.09.26 |
Firebase Push 와 관련된 적용사항 (0) | 2022.09.19 |
[Java] QueryDSL 테스트 클래스에서 사용하기 (0) | 2022.09.12 |
Java Stream 을 활용한 Sum/Avg/Min/Max 구하기 (0) | 2022.09.11 |
댓글
공지사항