linux (jenkins shell)에서 springboot project backgroud로 실행하기
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에서 실행시킬 수 있다.
끝!