spring boot 2.5.0 이상 버전에서 gradle을 사용하여 빌드를 할 경우, jar 파일이 2개 생성된다.
앱이름-plain.jar
를 실행하는 것을 막아야 한다.두 가지 방법이 있다.
앱이름-plain.jar
의 생성 자체를 막는다.jar {
enabled = false
}
grep
을 활용하여 앱이름-plain.jar
를 스캔 및 실행 대상에서 제외한다.ls -tr $REPOSITORY/*.jar | grep -v "plain" | tail -n 1
sudo kill -9 {process_id}
명령어로 모두 중지시키자.nohup.out
파일을 확인한다.no main manifest attribute, in /home/ec2-user/app/step2/RestApiPractice-1.0.1-SNAPSHOT-plain.jar
META-INF/MANIFEST.MF
파일에 등록되어 있어야 한다.RestApiPractice-1.0.1-SNAPSHOT-**plain**.jar
spring boot 2.5.0 이상 버전에서 gradle을 사용하여 빌드를 할 경우, jar 파일이 2개 생성된다.
즉, 위 에러는 앱이름-plain.jar
파일이 생성되어서 발생된 에러다.
해결 (참고: https://dongjuppp.tistory.com/87)
rm {파일이름}
명령어로 앱이름-plain.jar
파일을 모두 삭제한다.
jar {
enabled = false
}
build.gradle 파일에 위의 명령어를 추가한다.
앱이름-plain.jar
파일이 생성되지 않는다.👉 일단은 위의 방법으로 해결했다. 접속까지 완료!
그런데 문득, deploy.sh
파일에서, plain이 붙은 파일은 실행 대상에서 제외할 수 있지 않을까? 하는 생각이 들었다.
JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1) # 뭔가 여기서 -plain.jar를 걸러낼 수 있을 것 같은데.. 지속적으로 알아보자.
nohup java -jar \
-Dspring.config.location=classpath:/application.yaml,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties \
-Dspring.profile.active=real \
$JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
ls -tr $REPOSITORY/*.jar | tail -n 1
|
는 파이프라고 한다. A|B
→ A의 표준 출력을 B의 표준 입력으로 입력받는다.ls -tr $REPOSITORY/*.jar
→ jar 파일을 모두 출력한다.| tail -n 1
→ 출력한 jar 파일 중, 가장 최신의 것을 입력한다. → 입력이 곧 JAR_NAME
에 저장된다.ls -tr $REPOSITORY/*.jar | grep -v "plain" | tail -n 1
를 이용해서 plain이 들어간 jar 파일을 스캔 대상에서 제외해보자 👉 와 된다!!!!!!!!!!!!!
nohup ... $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
>
, 2>&1
등의 리눅스 명령어를 모른다. 일단 이것부터 알아보자.$JAR_NAME > $REPOSITORY/nohup.out 2>&1
>
가 한개이므로 덮어씀.>&
: 명령이 실행된 표준 출력의 결과와 에러를 파일로 출력[Linux] nohup 세션이 끊겨도 계속 실행되도록 해보자
감사합니다 ㅠㅠㅠ