AWS/AWS + Linux

[AWS] AWS로 배포하기 기본적인 방법 -3 nohup 사용해보기

pyogowoon 2023. 2. 14. 17:18

 들어가기에 앞서

 

 

프로젝트의 build.gradle 에 코드를 하나 추가합니다.

// plain archive는 애플리케이션 실행에 필요한 모든 의존성을 포함하지 않고 작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다.
// 이렇게 생성된 *plain.jar 파일은 모든 의존성이 존재하는게 아니기 때문에 java -jar 명령어로 실행시 에러가 발생한다.
// 아래 코드는 jar 빌드시에 plain.jar 파일이 생성되지 않게 해주는 코드이다.
jar {
   enabled = false 
}

이 설정은 jar 파일이 여러개 생기는것을 방지합니다.

 

 그리고 이번엔 nohup 명령어를 사용합니다.

 

 nohup 은 no hang up 의 약자입니다. 말 그대로 끊지마! 라는 뜻입니다.

 

 

nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해줍니다.

 

즉 우리가 AWS의 기본적인 배포 시작하기 -2 의 마지막에서 언급한 단점을 보완하는 방식입니다.

 

그럼 nohup을 사용해보겠습니다.

 

 

 

 

 우선 libs 가 있는 위치까지 당도합니다. ls 로 등록된 본인의 github 리포지토리 이름을 확인하고

 진입하여 최종 libs 까지 갑니다.

 

 

nohup java -jar *.jar &를 실행합니다. ( & = 백그라운드모드)

 - 여기서 중요한 정보 :  & 를 입력하지 않고 실행하면 포그라운드 모드로 실행되어 터미널을 종료하면 홈페이지에 접근할 수 없습니다. 꼭 & 를 붙입니다.

 밑에 nohup: ~ 은 일단 무시합니다.

 

 

터미널을 끄고 홈페이지에 접속해도 잘 됩니다.

 

 

 

 신기합니다. 터미널(mobaXterm) 을 종료해도 홈페이지에 접근이 가능합니다.

 포트번호도 살아있는지 확인해봅시다. 다시 터미널을 켜줍니다.

 

 

 

 켜고 sudo apt install net-tools 를 입력하여 net-tools 를 다운받습니다.

 

다운이 완료되었다면 netstat -nlpt 명령어를 실행합니다.

 

 8080 포트가 잘 돌고있네요. 백그라운드 모드로 잘 됩니다.

 

 하지만 log를 보고싶은데 -2 의 노헙을 사용하지않는 방법과 다르게 

 백그라운드 모드에는 어딜봐도 log가 보이지않습니다.

 

  그러나 nohup 은 자동으로 로그를 남겨줍니다.

 

 

 

ls 와 cd를 통해 libs로 당도해봅니다.

 

 원래는 없었던 nohup.out 이라는 파일이 생겼습니다. 이곳에 로그가 남겨집니다.

 

cat nohub.out

명령어를 실행합니다.

 

 nohub.out 에 로그가 찍혀나오는걸 확인할 수 있습니다.

 

 

또한

tail -f nohup.out

을 사용하면

 

실시간으로 로그가 찍히는것을 확인할 수 있습니다.

 

( 저 로그들은 현재 제가 url로 임의로 발생시킨 로그 입니다. 그냥 잘뜬다 정도만 알아도 됩니다.)

 

 프로세스를 종료하는 방법은

 

 

ctrl + c 를 눌러 빠져나온 후

 

 ps -ef를 쳐보면

 

 

 현재 프로세스 실행중인 파일들이 나옵니다. 우리의 JAR 도 나옵니다. 파란색 표시는 PID 인데

PID를 통해 종료합니다. 

 

 

kill -9 PID숫자 를 입력하여 프로세스를 강제종료 하고

netstat -nlpt 를 입력해보면

 8080포트가 종료된것을 볼수있습니다.

 

 

마지막으로

 

nohup java -jar *.jar > mylog.out & 

 이런식으로 (   > 파일명 & ) 을 붙여서 log를 나타내주는 파일을 바꿀수도있습니다. 이 경우 

 nohup.out 을 실행시켜야 나오던 log 가 mylog.out 에 나옵니다.