0. 개요
이번에는 저번 포스팅에 이어서, 프로젝트를 배포하는데 고려해야할 문제들에 대해서 조금씩 고쳐보는 시간을 가져보고자 합니다.
고려했던 문제가 몇개 있었습니다.
- 원격 터미널 창을 끄더라고 계속 실행이 되도록 백그라운드 실행이 되어야한다.
- 프로젝트의 로그 파일을 보기 좋게 분리해야 한다.
1. nohup로 백그라운드 실행
nohup이라는 명령어를 통해서 백그라운드 실행을 하도록 합니다. nohup는 리눅스에서 프로세스를 실행한 터미널의 세션연결이 끊어지더라도 지속적으로 동작할 수 있게 해주는 명령어입니다.
jar {
enabled = false
}
저번 포스팅에 언급을 안했는데, spring boot 프로젝트의 경우, build.gradle에 해당 옵션을 추가해줘야합니다.
원래는 build를 실행하면 jar파일이 두 개가 생기게 됩니다. 모든 라이브러리와 소스코드가 포함된 jar파일, plain.jar라는 모든 의존성을 포함하지 않고 소스코드의 클래스파일과 리소스 파일만 존재하는 파일이 생성됩니다. plain.jar는 모든 의존성이 존재하지 않기 때문에 java -jar로 빌드시 오류가 발생합니다.
위 옵션으로 plain.jar가 생성되지 않도록 합니다.
nohup java -jar *.jar* &
이제 nohup을 통해서 jar파일을 빌드해주록 합니다. 여기서 "&"이라는 옵션을 통해서 백그라운드 실행을 하게 됩니다.
이제 터미널을 꺼도 사이트에 접근이 계속해서 가능한 상태가 되었습니다.
sudo apt install net-tools
netstat -nlpt
netstat이라는 명령어로 현재 실행중인 프로세스를 확인하기위해 net-tools를 다운받아서 netstat명령어를 사용해봅니다.
이렇게 프로세스가 돌아가고 있는 것을 확인할 수 있습니다.
2. 로그파일 변경 및 분리
이제 로그파일을 분리해보도록 합니다. 몇백줄이나 되는 기존의 프로젝트 로그를 보고 판단하는 것 보다, 에러가 있는지, 어떤 사용자가 접근하는지 등등의 로그파일을 분리해서 목적에 따라 확인하게 하는 것이 좋습니다. 로그파일을 변경하는 방법 이후에 로그파일을 분리해보도록 하겠습니다.
로그파일 확인 및 변경
ls
cat nohup.out
nohup으로 백그라운드 실행을 하게되면, nohup.out이라는 파일이 생성됩니다. 해당 파일을 cat으로 들어가보면, 내 프로젝트의 로그들이 모두 모여있습니다.
tail -f nohup.out
하지만, 계속 들어오는 로그들을 위해서 tail 이라는 명령어로 로그의 변화를 계속 관찰할 수 있습니다. 사이트에 접근하면 실시간으로 로그가 들어오는 것을 확인할 수 있습니다.
ps -ef
kill -9 "프로젝트 jar파일 프로세스 PID 번호"
그럼 위처럼 실행중인 프로세스를 확인해서 PID를 알아내고 kill 명령어로 일단 실행중인 프로세스를 죽여주도록 합니다. netstat으로 종료된 것을 확인할 수 있습니다.
nohup java -jar *.jar > mylog.out &
이제 nohup으로 프로젝트를 배포할 때, 옵션을 줘서 mylog.out이라는 파일로 로그가 모이도록 해줍니다. 이제 로그가 내가 원하는 이름의 파일로 모이게 됩니다.
로그파일 분리
nohup java -jar asasdq23adsd213da.jar &
만약 위처럼 이상한 파일명으로 아무렇게나 nohup을 실행하더라도 실행되지는 않지만, nohup.out이라는 로그파일은 생성됩니다. 여기에 실패한 내용에 대한 에러 로그가 남습니다. 그럼 정상적인 로그와 에러로그를 따로따로 파일로 분리해서 저장하도록 해봅시다.
nohup java -jar v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out
위처럼 명령어로 1 의 경우 정상적인 로그, 2의 경우 에러로그를 의미합니다 .이렇게 따로따로 원하는 파일의 이름으로 저장이 가능합니다.
위처럼 프로젝트.jarr 처럼 잘못된 이름으로 배포를 시도하면, 위처럼 err.out에 에러 로그가 남게 됩니다. 반대로 정상적이라면 log.out에 남게 됩니다. 이제, 나중에 프로젝트를 배포했는데, 실행이 안되었다? err.out이라는 로그 파일만 확인하면 됩니다.
'Project > AWS 및 배포' 카테고리의 다른 글
AWS - 3-3. 베이직 하게 배포해보기 - cron으로 주기적 실행 (0) | 2024.01.31 |
---|---|
AWS - 3-2. 베이직 하게 배포해보기 - 타임존 변경, 스크립트 작성 (1) | 2024.01.31 |
AWS - 3. 베이직 하게 배포해보기 - EC2 서버에 프로젝트 배포하기 (1) | 2024.01.31 |
AWS - 2. 키페어와 RSA (0) | 2024.01.30 |
AWS - 1. AWS에 대해서 (0) | 2024.01.30 |