원격으로 설정된 리눅스 서버로 접근했을 때, 로컬의 세션이 종료될때마다 프로세스도 함께 죽는 현상이 발생한다. 리눅스에서 제공하는 명령어인
nohup
을 이용하면 터미널의 세션 연결이 끊어지더라도 지속적으로 프로세스를 동작할 수 있게 해준다.
nohup
터미널 종료 후 프로세스 작업을 유지해주는 리눅스 명령어
nohup [커맨드 명령어] &
를 이용하여 백그라운드 프로세스를 유지시키려고 했다. 커맨드 명령어에는 자신의 프로젝트를 실행시키는 명령어를 적어주면 된다.
nohup yarn start &
하지만 또다시 세션종료와 동시에 프로세스도 죽는 문제가 발생했다😥
이 문제는 아래 disown
옵션을 추가해서 해결할 수 있었다!
disown
터미널 종료 시 프로세스 종료 방지
disown
은 프로세스 작업의 소유권을 shell session에서 해제시키는 옵션이다. 옵션으로 추가해주면 현재 session job list에서 job 들이 빠져나가게 된다.
(이는 jobs 커맨드로 확인 가능, 프로세스 전체 보기로 보면 프로세스는 남아있는 것을 볼 수 있다.)
따라서 터미널이 종료되어도 SIGHUP이 전달되지 않아서 계속 돌아가게 된다.
nohup을 실행하고 나면 프로젝트 내부에 nohup.out
의 이름을 가진 파일이 생성된다. 세션이 종료되어도 프로세스의 출력값을 저장하는 파일로, 언제든지 이 파일을 통해 프로세스의 상태를 확인할 수 있다.
nohup 으로 실행중에 nohup.out 을 비우고 싶다면, 아래 명령어를 사용하면 된다.
cat /dev/null > nohup.out