- 공유 링크 만들기
- X
- 이메일
- 기타 앱
SSH로 원격 서버에 접속해 작업을 실행했는데, 터미널을 닫는 순간 프로세스가 종료된 경험이 있습니까? 장시간 실행되는 배치 작업이나 서버 프로세스를 안전하게 백그라운드에서 유지하려면, 단순히 & 기호만으로는 부족합니다. 이 글에서는 nohup, &, disown의 동작 원리와 실전 활용법을 명확히 정리합니다.
| SSH 종료 후에도 프로세스 살리기 nohup disown 활용 가이드 |
1. 백그라운드 실행의 기본: & 기호
명령어 끝에 & 기호를 추가하면 해당 프로세스가 백그라운드에서 실행됩니다.
- 사용법:
$ command & - 출력: 셸은 작업 ID(Job ID, 대괄호로 표시)와 프로세스 ID(PID)를 반환합니다.
- 제약사항: 터미널 세션에 종속되어 있어, 터미널을 닫으면 해당 프로세스도 함께 종료됩니다.
핵심 원리: 터미널이 종료되면 해당 세션에 연결된 모든 프로세스에 SIGHUP(hangup) 시그널이 전송됩니다. 기본 동작은 프로세스 종료이므로, 백그라운드 실행만으로는 터미널 독립성을 보장할 수 없습니다.
2. 터미널 종료에도 살아남는 방법: nohup
nohup은 "no hang up"의 약자로, SIGHUP 시그널을 무시하도록 프로세스를 실행합니다.
- 사용법:
$ nohup command & - 출력 리다이렉션: 표준 출력과 에러는 자동으로
nohup.out파일에 저장됩니다. - 권장 패턴:
$ nohup python batch.py > output.log 2>&1 &
실전 팁:
- 로그 파일 경로를 명시적으로 지정하지 않으면 현재 디렉터리에
nohup.out이 생성되므로, 권한 문제나 디스크 용량을 사전에 확인하십시오. - 표준 에러(stderr)도 함께 리다이렉션하려면
2>&1을 반드시 추가하십시오. - nohup은 프로세스 시작 시점에만 적용 가능합니다. 이미 실행 중인 프로세스에는 적용할 수 없습니다.
3. 실행 중인 프로세스 보호: disown
이미 백그라운드로 실행 중인 작업을 터미널 세션에서 분리하려면 disown을 사용합니다.
- 사용법:
- 프로세스를 백그라운드로 실행:
$ command & - 작업 리스트 확인:
$ jobs - 특정 작업 분리:
$ disown %1(또는 전체 분리:$ disown)
- 프로세스를 백그라운드로 실행:
- 동작 원리: 셸의 작업 테이블에서 해당 프로세스를 제거하여, 터미널 종료 시 SIGHUP 전송 대상에서 제외합니다.
nohup vs disown 선택 기준:
- nohup: 프로세스 시작 전에 적용. 로그 리다이렉션이 자동화되어 있어 배치 작업에 적합합니다.
- disown: 이미 실행 중인 프로세스를 사후에 보호. 급하게 터미널을 닫아야 할 때 유용하지만, 표준 출력이 터미널에 연결되어 있으면 에러가 발생할 수 있습니다.
4. 프로덕션 환경에서의 권장 패턴
실무에서는 단순 백그라운드 실행보다 프로세스 관리 도구를 사용하는 것을 권장합니다.
- systemd: 서비스 단위로 프로세스를 관리하며, 자동 재시작, 로그 집중화, 리소스 제한 기능을 제공합니다.
- supervisord: Python 기반 프로세스 관리 도구로, 설정이 직관적이며 웹 UI를 지원합니다.
- tmux / screen: 터미널 멀티플렉서를 사용하면 세션 자체를 유지할 수 있어, 재접속 후 작업 상태를 그대로 확인할 수 있습니다.
주의사항: nohup과 disown은 간단한 테스트나 일회성 작업에는 유용하지만, 프로세스 모니터링, 자동 재시작, 로그 로테이션이 필요한 프로덕션 환경에서는 systemd나 supervisord 같은 전용 도구를 사용하십시오.
요약 및 Action Item
백그라운드 실행(&)만으로는 터미널 종료 시 프로세스가 함께 종료됩니다. nohup은 프로세스 시작 시 SIGHUP을 차단하며, disown은 실행 중인 프로세스를 사후에 보호합니다. 프로덕션 환경에서는 systemd나 supervisord를 사용하여 프로세스 생명주기를 체계적으로 관리하는 것이 안정성과 운영 효율성을 모두 확보할 수 있습니다.
당장 실행할 것: 현재 실행 중인 장시간 배치 작업이 있다면, jobs 명령으로 작업 ID를 확인한 뒤 disown %작업번호를 실행하여 터미널 종료로부터 보호하십시오. 향후 반복 작업은 nohup과 로그 리다이렉션을 조합한 스크립트로 자동화하는 것을 권장합니다.
#함께 읽으면 좋은 글
Linux 파일 권한의 모든 것: chmod 755 vs 777 차이와 chown 사용법 : 바로보기
댓글
댓글 쓰기