Programming/Linux

nohup 명령어를 사용해도 프로세스가 종료되는 경우 해결 방법

Jan92 2021. 8. 1. 16:42

서버에 서비스를 배포 중 터미널이 종료되어도 프로세스가 지속되도록 하기 위해 찾은 방법이 nohup 명령어입니다.

처음 nohup 명령어를 사용하여 프로젝트를 실행했을 때는 터미널 종료 후에도 서비스가 계속 동작하는 것을 확인하였으나, 마무리 작업에서 갑자기 nohup 명령어를 사용해도 프로젝트가 종료되는 경우가 발생하여 찾은 해결 방법입니다.

 

우선 nohup 명령어는 리눅스(Linux)에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 계속 동작할 수 있게 해주는 명령어입니다.

 

원리는 터미널에서 로그아웃이 발생하면 리눅스는 해당 터미널에서 실행한 프로세스들에게 hup signal을 전달하여 종료시키는데, nohup 명령어가 이 hup signal을 무시하는 명령어기 때문에 터미널 연결이 끊어지거나 종료되도 실행했던 프로그램들이 계속 유지될 수 있는 것입니다.

 

// 기본 실행 명령어
$nohup [프로세스] &

// 실제 적용 예
$nohup java -jar example.jar &

// log가 기록되는 파일을 따로 설정하고 싶을 때
$nohup java -jar example.jar > example.out &

* 맨 뒤에 ' & ' 를 붙이는 것은 백그라운드에서 작업을 실행한다는 의미입니다.

 

 

$nohup java -jar example.jar &

명령어로 프로젝트가 실행되는 것을 확인하고 터미널을 그냥 닫았을 경우 프로젝트가 같이 종료되어 버렸습니다.

 

 

exit

찾은 방법은 터미널을 그냥 닫지 않고, exit 명령어를 사용했습니다.

exit 명령어를 사용하면 터미널에서 logout 되면서 Connection이 closed 되었다는 메세지가 발생합니다. 

그리고 터미널을 닫았을 때 실행했던 프로젝트는 계속 작동되는 것을 확인하였습니다.