Linux

[Linux] nohup 명령어 사용법: 터미널을 종료해도 프로세스를 계속 실행하기

JustJunsu 2024. 10. 23. 16:57
728x90

1. nohup이란?

nohup은 "no hangup"의 줄임말로, 터미널 세션이 끊겨도 프로세스를 계속 실행할 수 있도록 도와주는 리눅스/유닉스 명령어입니다. 예를 들어, 서버에서 긴 시간이 걸리는 스크립트나 작업을 실행할 때, SSH 세션이 종료되더라도 작업을 중단 없이 계속 실행할 수 있습니다.

2. nohup 기본 사용법

기본적으로 nohup은 다음과 같은 형식으로 사용됩니다:

nohup [실행할 명령어] &

 

&는 명령어를 백그라운드에서 실행하기 위한 기호입니다. 이 기호를 사용하면 해당 프로세스가 백그라운드에서 계속 실행됩니다.

예시:

nohup python my_script.py &

 

이 명령은 my_script.py 스크립트를 백그라운드에서 실행하고, 터미널이 종료되더라도 계속 실행되도록 설정합니다.

3. nohup 출력 관리

nohup을 사용하면 기본적으로 실행 결과가 nohup.out 파일에 저장됩니다. 이 파일은 현재 디렉토리 또는 홈 디렉토리에 생성되며, 실행한 명령의 출력 로그를 저장합니다.

예시:

nohup python my_script.py &
 

위 명령어를 실행하면 nohup.out 파일이 생성되고, 여기에 my_script.py의 출력 결과가 기록됩니다.

출력을 다른 파일로 리다이렉션하는 방법:

 
nohup python my_script.py > output.log 2>&1 &

 

이 명령은 실행 결과를 **output.log**라는 파일에 기록하며, 에러 출력도 이 파일에 포함됩니다.

  • > output.log: 일반 출력(stdout)을 output.log 파일로 저장
  • 2>&1: 에러 출력(stderr)을 일반 출력에 포함

4. 백그라운드에서 실행된 작업 확인

백그라운드에서 실행된 프로세스는 터미널을 종료해도 계속 실행됩니다. 현재 실행 중인 프로세스를 확인하려면 jobs 또는 ps 명령어를 사용할 수 있습니다.

jobs 명령어:

jobs

현재 터미널에서 실행된 백그라운드 작업을 확인할 수 있습니다.

ps 명령어:

ps aux | grep my_script.py

ps aux 명령어는 시스템에서 실행 중인 모든 프로세스를 나열하고, grep을 사용하여 특정 프로세스를 필터링합니다.

5. 백그라운드 프로세스 종료

백그라운드에서 실행 중인 프로세스를 종료하려면 kill 명령어를 사용할 수 있습니다. 먼저, 해당 프로세스의 PID(프로세스 ID)를 찾아야 합니다.

PID 찾기:

ps aux | grep my_script.py
 

프로세스 종료:

kill [PID]

6. nohup과 함께 사용하는 유용한 명령어들

disown

nohup을 사용하지 않고 백그라운드로 보낸 작업을 터미널 세션 종료 후에도 계속 실행되도록 하고 싶다면 disown 명령어를 사용할 수 있습니다.

python my_script.py & disown

 

disown은 백그라운드에서 실행된 프로세스를 현재 터미널 세션에서 분리하는 명령어입니다. 터미널을 종료해도 해당 프로세스는 계속 실행됩니다.

screen과 tmux

nohup은 단순하게 프로세스를 백그라운드에서 실행할 때 사용되지만, 더 고급 기능이 필요한 경우 screen이나 tmux 같은 터미널 멀티플렉서를 사용할 수 있습니다. 이 도구들은 여러 세션을 열어 작업을 관리하고, 세션을 분리하고 재접속하는 기능을 제공합니다.

7. 사용 사례

다음은 nohup을 사용한 실제 사례입니다.

장시간 실행되는 머신러닝 모델 학습:

nohup python train_model.py > train_output.log 2>&1 &

서버 유지 관리 작업:

nohup ./backup_script.sh > backup.log 2>&1 &

 

이렇게 설정하면 장시간 실행되는 스크립트나 백업 작업을 터미널이 닫히더라도 계속 실행할 수 있습니다.


8. 결론

nohup은 터미널 세션이 종료되더라도 프로세스를 계속 실행할 수 있게 해주는 매우 유용한 리눅스 명령어입니다. 장시간 실행되는 작업을 백그라운드에서 안정적으로 실행할 수 있게 도와주며, 백업 작업, 머신러닝 모델 학습, 데이터 처리 등 다양한 작업에 유용하게 활용할 수 있습니다.

참고 사항:

  • 프로세스가 종료되면 출력을 기록한 nohup.out 파일이 생성됩니다.
  • 출력을 특정 파일로 리다이렉션하려면 > output.log 2>&1 형식을 사용하세요.
  • disown 명령어를 통해 기존의 백그라운드 작업을 nohup처럼 처리할 수 있습니다.

Reference

https://www.baeldung.com/linux/nohup-command-tutorial

 

728x90