nohup이란 무엇인가?
nohup은 'No Hang Up'의 약자로, 끊김 신호(HUP 시그널)를 무시하고 명령을 실행한다는 뜻입니다. 보통 터미널 창을 닫으면 실행 중인 프로그램도 같이 종료되지만, nohup을 사용하면 방패처럼 이를 막아줍니다.
핵심 개념 3가지
- HUP 시그널 무시: 사용자가 로그아웃할 때 시스템이 보내는 종료 신호(SIGHUP)를 무시하여 프로세스를 계속 살려둡니다.
- nohup.out: 별도로 저장할 파일을 지정하지 않으면, 실행 결과(출력 내용)가 자동으로 `nohup.out` 파일에 저장됩니다.
- & (백그라운드): nohup 단독으로는 터미널을 차지해버립니다. 보통 명령어 끝에 `&`를 붙여 백그라운드로 보냅니다.
주요 문법 및 옵션 (Shell)
nohup 자체에는 복잡한 옵션이 없습니다. 대신 **실행할 명령어**와 **리다이렉션(출력 방향 지정)**을 조합하여 사용합니다.
1. 기본 실행 구성
2. 로그(출력) 관리
3. 도움말
생성된 명령어:
명령어를 조합해 보세요.
설명:
`nohup` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 시나리오 예시
실무에서 가장 많이 사용하는 nohup 패턴입니다.
가장 기본적인 사용법
nohup ./backup.sh &
스크립트를 백그라운드에서 실행합니다. 출력은 `nohup.out`에 쌓입니다.
로그 파일 이름 지정하기 (권장)
nohup python3 app.py > my-app.log 2>&1 &
`nohup.out` 대신 `my-app.log`에 로그를 저장합니다. `2>&1`은 에러 메시지도 같은 파일에 저장하겠다는 뜻입니다.
로그 없이 실행하기
nohup ./heavy-task.sh > /dev/null 2>&1 &
출력 내용이 필요 없거나 너무 많아 디스크가 찰 우려가 있을 때 출력을 `/dev/null`로 버립니다.
실행 중인 nohup 프로세스 찾기
ps -ef | grep app.py
`ps` 명령어로 실행 중인 프로세스를 확인합니다.
설치
nohup은 'GNU Coreutils'에 포함된 기본 명령어로, 거의 모든 리눅스 배포판에 이미 설치되어 있습니다.
설치 확인
대부분 별도 설치가 필요 없습니다. 아래 명령어로 설치 여부를 확인할 수 있습니다.
버전 확인
nohup --version
팁 & 주의사항
유용한 팁
- 이미 실행 중인 작업은?: nohup을 깜빡하고 그냥 실행했다면, `Ctrl+z`로 멈춘 뒤 `bg`로 백그라운드 전환하고 `disown -h %1` 명령어를 사용하면 nohup 효과를 낼 수 있습니다.
- 종료 방법: nohup으로 실행된 프로세스는 `Ctrl+c`로 꺼지지 않습니다. `ps -ef | grep [이름]`으로 PID(프로세스ID)를 찾아 `kill -9 [PID]` 명령어로 종료해야 합니다.
- 디스크 용량 주의: 오래 실행되는 프로그램이 `nohup.out`에 계속 로그를 쓰면 파일이 거대해져 서버가 멈출 수 있습니다. 주기적으로 비우거나 `/dev/null`을 사용하세요.