안녕하세요.
루디쿡 아이티입니다~!!
이번에 소개드릴 리눅스의 핵심 기술은
바로 세션이 끊겨도 프로세스를 살려두는 불사조, nohup 입니다!!

nohup 이란?
nohup은 'No Hang Up'의 약자로,
이름 그대로 터미널 연결이 끊어지더라도(Hang Up) 실행 중인
프로세스를 계속 동작시키는 놀라운 명령어입니다.
서버에 접속해서 몇 시간씩 걸리는 백업이나 데이터 처리 작업을 실행했는데,
갑자기 네트워크가 끊기거나 실수로 터미널 창을 닫아버린 경험,
다들 있으시죠?
nohup은 바로 이럴 때를 위한 '프로세스 전담 보디가드'와 같습니다.
든든하게 내 명령을 끝까지 지켜주죠. 🛡️
nohup의 역사는 초기 유닉스 시절로 거슬러 올라갑니다.
당시에는 모뎀으로 서버에 전화선처럼 접속했는데,
연결이 끊어지는 'Hang Up' 상황이 잦았습니다.
이때 연결이 끊기면 터미널은 자식 프로세스들에게
'이제 그만 종료하라'는 의미로 HUP (Hangup) 신호를 보냈고, 모든 작업이 중단되었습니다.
nohup은 바로 이 HUP 신호를 무시하도록 만들어,
터미널과의 연결이 끊어져도 프로세스가 계속 실행되도록 하기 위해 탄생했습니다.
"하나의 도구는 하나의 작업만 잘해야 한다"는
유닉스 철학에 따라, 프로세스를 끊김 없이 실행하는 역할에만 완벽하게 집중하는 명령어입니다.
nohup 문법 및 핵심 원리
nohup의 구조는 매우 간단하지만, 백그라운드 실행을 위한 & 기호와 함께 쓸 때 진정한 힘을 발휘합니다.
nohup [실행할 명령어] &
| 요소 | 설명 |
| nohup | HUP 신호를 무시하여 프로세스를 보호하는 명령어입니다. |
| [실행할 명령어] | 백그라운드에서 계속 실행하고 싶은 명령어 또는 셸 스크립트입니다. |
| & | '백그라운드(background)에서 실행하라'는 셸 제어 문자입니다. |
nohup은 실행된 프로세스의 표준 출력(stdout)과 표준 에러(stderr)를 자동으로 현재 디렉터리의 nohup.out 파일에 저장해줍니다. 덕분에 나중에 터미널에 다시 접속해서 작업이 어떻게 진행되었는지 로그를 확인할 수 있습니다.
nohup 실제 예시
nohup의 다양한 활용법을 알아보기 위해, 10초 동안 매초 현재 날짜를 기록하는
RudiCook_backup.sh 셸 스크립트를 예제로 사용하겠습니다.
RudiCook_backup.sh 파일의 원본 내용
#!/bin/
echo "=== RudiCook IT Backup Start ==="
for i in {1..10}
do
date
sleep 1
done
echo "=== RudiCook IT Backup End ==="
(위 내용을 RudiCook_backup.sh 파일로 저장하고
chmod +x RudiCook_backup.sh 명령어로 실행 권한을 주세요.)
예시 1: 가장 기본적인 nohup 사용법
먼저 RudiCook_backup.sh 스크립트를 nohup과 &를
이용해 백그라운드에서 실행시켜 보겠습니다.
| 구분 | 내용 |
| 목표 | RudiCook_backup.sh 스크립트를 터미널 연결이 끊겨도 계속 실행되도록 만들기 |
| 전체 명령어 | nohup ./RudiCook_backup.sh & |
| 명령어 분석 | nohup: HUP 신호를 무시하도록 설정 ./RudiCook_backup.sh: 실행할 스크립트 &: 백그라운드에서 실행 |
| 실행 결과 ✨ | [1] : ignoring input and appending output to 'nohup.out' |
| 결과 분석 | [1] 12345는 **작업 번호(Job ID)**와 **프로세스 ID(PID)**를 의미합니다. 이제 터미널을 종료하거나 exit 명령어로 접속을 끊어도, PID 12345번 프로세스는 서버에서 계속 실행됩니다. |
예시 2: nohup.out 파일 확인하기
스크립트가 실행되는 동안 또는 끝난 후에, nohup.out 파일에 로그가 잘 쌓였는지 확인해 보겠습니다.
| 구분 | 내용 |
| 목표 | 백그라운드에서 실행된 스크립트의 출력 결과 확인하기 |
| 전체 명령어 | cat nohup.out |
| 명령어 분석 | cat nohup.out: nohup이 자동으로 생성한 로그 파일의 내용을 화면에 출력합니다. |
| 실행 결과 ✨ | 아래 확인!! |
=== RudiCook IT Backup Start ===
2025년 09월 10일 수요일 23시 58분 01초 KST
2025년 09월 10일 수요일 23시 58분 02초 KST
... (10초간의 날짜 기록) ...
2025년 09월 10일 수요일 23시 58분 10초 KST
=== RudiCook IT Backup End ===
결과 분석: RudiCook_backup.sh 스크립트의 echo와 date 명령어 결과가
nohup.out 파일에 순서대로 잘 저장된 것을 확인할 수 있습니다.
예시 3: 출력 파일을 직접 지정하기 (Redirection)
nohup.out이 아닌 내가 원하는 파일(backup.log)에 로그를 저장해 보겠습니다.
리눅스의 '리다이렉션(Redirection)'을 활용하면 됩니다.
| 구분 | 내용 |
| 목표 | nohup 실행 결과를 backup.log 파일에 저장하기 |
| 전체 명령어 | nohup ./RudiCook_backup.sh > backup.log 2>&1 & |
| 명령어 분석 | >: 표준 출력(stdout)을 backup.log 파일로 보냅니다. 2>&1: 표준 에러(stderr, 2번)를 표준 출력(stdout, 1번)이 가는 곳으로 똑같이 보냅니다. 즉, 모든 로그를 backup.log 하나로 모으는 것입니다. |
| 실행 결과 ✨ | [1] 54321 |
| 결과 분석 | 이제 nohup.out 파일은 생성되지 않습니다. 대신 cat backup.log 명령어를 실행하면 예시 2와 동일한 결과가 backup.log 파일에 저장된 것을 확인할 수 있습니다. |
이것으로 터미널의 지배에서 벗어나 명령을 자유롭게 실행하는 nohup에 대해 알아보았습니다.
장시간 실행이 필요한 모든 작업에 nohup을 활용하여 안정적인 서버 운영을 경험해 보세요!
앞으로도 좋은 글로 찾아뵙도록 하겠습니다.

IT 성능 전문가, IT를 전하는 루디쿡아이티였습니다!!
감사합니다~!!

'인프라 (Infrastructure) > 운영체제 (OS)' 카테고리의 다른 글
| 리눅스 top 명령어 사용법 및 실제 예제 활용 | CPU, Memory 확인, PID 강제 종료 (0) | 2025.09.11 |
|---|---|
| 리눅스 wget 명령어 사용법 및 실제 예제 활용 | 파일 다운로드 방법 (0) | 2025.09.11 |
| 리눅스 kill 명령어 사용법 및 실제 예제 활용 | 프로세스 종료, 신호 전달 (1) | 2025.09.11 |
| 리눅스 head / tail 명령어 사용법 및 실제 예제 활용 (tail -f 옵션 사용법) (0) | 2025.09.10 |
| 리눅스 chown 명령어 사용법 및 실제 예제 활용 (파일 / 폴더 소유권 변경) (0) | 2025.09.09 |