Introduction
nohup = no hang up
말 그대로, 끊지 말라는 뜻이다.
Example
Linux server에서 작업을 하다가 보면, 세션이 종료되는 경우 프로세스들이 함께 종료된다.
예를 들어 보자. VSCode나 terminal을 local Macbook에서 열어서 remote Linux server에서 작업하고 있다. 그리고 shell에 bash train.sh 등의 command를 입력했는데, 작업이 아직 돌아가는 중에 VSCode나 terminal을 종료하면 해당 작업이 모두 중단된다.
이렇게 로그아웃 되더라도 프로세스가 계속 돌아갈 수 있도록 해주는 명령어가 nohup 이다.
Usage
사용법은 매우 간단하다. 실행하고자 하는 command 앞에 nohup 을 붙이면 된다.
$ nohup bash train.sh
Bash
복사
실행해보면 nohup.out 이라는 파일이 생성되면서 stdout 내역이 이 파일에 저장된다.
다른 파일에 쓰고 싶다면 redirection을 해주면 되고, 출력 내용이 필요없다면 /dev/null 로 보낸다.
$ nohup bash train.sh > my_own_output.out
$ nohup bash train.sh > /dev/null
Bash
복사
&과의 차이
Command 끝에 & 를 붙이는 것과 nohup은 어떻게 다를까?
•
nohup: user session이 아닌 OS의 background에서 실행
•
&: user session에서 실행되지만 stdout, stderr 등 출력만 background로 전환
따라서, & 만 사용하면 session 종료 시 프로그램이 종료된다.
참고로, bash script 이외에도 python file (.py) 역시 nohup 으로 실행할 수 있다.
그러나 python file의 출력이 background에 나올 수 있도록 끝에 &도 붙여주는 것이 좋다.
또한, Python 출력을 바로 update 해서 실시간으로 출력을 볼 수 있도록 -u option을 추가해주자.
$ nohup python -u my_python_file.py &
Bash
복사