OS/Linux

linux (jenkins shell)에서 springboot project backgroud로 실행하기

호형 2020. 7. 28. 10:22

springboot 로 프로젝트를 구성하고 배포환경을 구성하였다. 이제 실행 스크립트만 작성을 하면 되는데 문제가 생겼다. 내장 was를 사용하기에 springboot 실행/중지 파일 (start.sh/stop.sh) 을 직접 만들어줬고 이를 통해 실행을 하려 한다. 

 

start.sh ( before )

#!/bin/bash
java -jar /springboot jar경로/sample.jar --spring.profiles.active=dev

 

이걸 jenkins의 Execute Shell을 통해 혹은 linux shell에서 실행을 한다면 springboot가 background로 실행되는것이 아니라 실행된 상태로 끊어지지 않고 대기한다. 이걸 ctrl+c 와 같은 행위로 멈춘다면 실행도 멈추게 된다. 즉 계속 켜놔야 하는 상황이 벌어지게 되는 것이다. 하지만 방법은 있다. 

 

start.sh ( after )

#!/bin/bash
nohup java -jar /springboot jar경로/sample.jar --spring.profiles.active=dev > /dev/null 2>&1 &

 

위의 실행 방법을 아래와 같이 바꾸는 것이다. 뒤에 > /dev/null 2>&1 이것이 핵심인데 이 springboot로 실행되는 것에 대해서 아무런 출력을 하지 말라 는 뜻이다. 즉 기존처럼 계속 로깅이 되는것이 아니라 실행되고 딱 끝이 난다. 그렇기 때문에 background에서 동작을 할 수 있는것이다. 

 

nohup     : 백그라운드에서 실행할수 있도록 해줌, 표준 출력을 nohup.out으로 돌리는 역할을 수행한다. 

>            : redirect 

/dev/null  : 휴지통

2            : 표준 에러 출력

&            : 출력

1            :  표준 출력

 

이 뜻으로 미루어  1(생략됨) > /dev/null 2>&1 를 해석을 해 보면

 

1(생략됨) > /dev/null  : 표준 출력은 휴지통에 넣어라. 즉 출력에 대해서 아무것도 남기지 말아라. 

2>&1                      : 표준 에러는 표준 출력에 표시를 해라.

 

표준 출력은 휴지통에 버리고, 표준 에러 출력도 아무것도 남기지 말라는 것이다. 즉 아무런 출력을 하지 말라는 뜻이다. 

 

이렇게 함으로써 springboot jar를 background에서 실행시킬 수 있다. 

 

끝!