상황
Restfull으로 개발된 SpringBoot 애플리케이션을 AWS EC2에 배포하였다.

어 그런데 일정 시간이 지나면 자동으로 연결이 끝어지면서 서버가 종료하게 된다.
학교 선배님에게 듣기로는 서버는 절대 죽어서는 안되고 계속 돌아가야 한다고 하여 방법을 찾게 되었다.
nohup, disown 명령어
// 공통 명령어
bashCopy code
nohup command-to-be-run &
// 포그라운드 프로세스 Spring jar파일 기준 방법
nohup java -jar ~.jar &
// 백그라운드 프로세스 기준
disown

nohup은 "no hangup"을 의미하며, 프로세스를 시작할 때 사용된다. 이는 터미널 세션 종료 시에 신호를 무시하도록 프로세스에 지시하는 것을 의미한다. & 기호는 명령어는 해당 프로세스를 백그라운드에서 실행하도록 한다.
disown 은 bash 셸의 내장 명령으로, 이미 실행 중인 백그라운드 프로세스에 대해 사용되며 현재 셸의 작업 목록에서 작업을 제거한다. disown이 실행되면, 해당 프로세스는 셸에서 분리되어 사용자가 로그아웃하더라도 계속 실행되게 된다.
따라서 위 명령어는 ~.jar를 실행하고, 이 프로세스를 백그라운드에서 계속 실행하도록 하며, 터미널이나 쉘이 닫혀도 종료되지 않도록 한다.
요약: 프로그램을 터미널 세션 종료 시에 신호를 무시하도록 설정 후 백그라운드로 실행시켜 사용자가 로그아웃을 하거나 네트워크 연결이 끊어져도 중단되지 않게 해준다.
특이사항
- nohup 명령어로 실행되는 프로세스는 자동으로 재시작 되지 않는다.
- 서버가 중지되거나 재부팅 된다면 수동으로 다시 실행시켜 주어야 한다.
- nohup java -jar ~.jar > output.log 2>&1 & 명령어를 통해
- nohup.out 파일에 출력을 저장하지 않고 다른 파일에 저장하는 것이 가능하다.
'Development > Spring' 카테고리의 다른 글
| 스프링 프로젝트 명명규칙 (0) | 2023.08.05 |
|---|---|
| multipart.MaxUploadSizeExceededException 해결 (0) | 2023.07.30 |
| Tomcat, Jetty, Undertow (0) | 2023.07.16 |
| Spring vs SpringBoot (0) | 2023.07.16 |
| DTO, POLO 데이터 객체 (0) | 2023.07.01 |



