리눅스 명령어 / nohup

nohup 명령어

nohup은 no hang up의 약자로, 터미널을 닫거나 로그아웃해도 프로세스가 계속 실행되게 합니다.

사용법

예제

다음과 같은 001.sh 파일이 있습니다.

#!/bin/bash
for ((i=1;i<=5;i++));
do
  sleep 6
  echo $i
done

실행시키면 6초 후에 1, 6초 후에 2, 6초 후에 3, 6초 후에 4, 6초 후에 5를 출력합니다. 실행 완료에 총 30초가 걸립니다.

기본

  • 001.sh를 터미널 종료 후에도 계속 실행합니다.
  • 출력 결과는 nohup을 실행한 디렉토리에 nohup.out 파일로 저장됩니다.
[root@localhost bash]# nohup bash 001.sh
nohup: ignoring input and appending output to 'nohup.out'

nohup.out

1
2
3
4
5
  • 이미 nohup.out이 있다면, 기존 내용 뒤에 추가합니다. 예를 들어 위 명령을 한번 더 실행하면 다음과 같이 됩니다.
1
2
3
4
5
1
2
3
4
5

백그라운드에서 실행

  • &를 추가하면 001.sh를 백그라운드에서 실행합니다.
  • 엔터키를 누른 후 다른 작업을 할 수 있습니다.
# nohup bash 001.sh &
  • jobs 명령어로 상태를 확인할 수 있습니다.
[root@localhost bash]# nohup bash 001.sh &
[1] 3949
[root@localhost bash]# nohup: ignoring input and appending output to 'nohup.out'

[root@localhost bash]# jobs
[1]+  Running                 nohup bash 001.sh &

tail 명령어로 작업 진행 상황을 볼 수 있습니다.

[root@localhost bash]# tail -f nohup.out

프로세스 종료

  • ps 명령어로 해당 작업에 대한 PID를 확인합니다.
# ps aux | grep 001.sh
root        1497  0.0  0.0   6948  3204 pts/0    S    08:54   0:00 bash 001.sh
root        1510  0.0  0.0   6384  1992 pts/0    S+   08:55   0:00 grep --color=auto 001.sh
  • kill 명령어로 프로세스를 종료합니다.
# kill 1497

출력 파일 변경

  • 출력 결과를 log_001.txt에 기록합니다.
[root@localhost bash]# nohup bash 001.sh > log_001.txt &