Linux

nohup : 백그라운드 프로세스 실행

코샵 2025. 2. 3. 13:15
반응형

nohup은 'no hang up'의 약자로, 터미널 세션이 종료되어도 프로세스가 계속 실행되도록 하는 Linux/Unix 명령어입니다. 서버 운영에서 매우 중요한 이 명령어의 사용법에 대해 자세히 알아보겠습니다.

기본 사용법

# 기본 형식
nohup command [arguments] &

# 예시: Python 스크립트 실행
nohup python3 app.py &

# 출력 리다이렉션
nohup python3 app.py > app.log 2>&1 &

출력 관리

nohup은 기본적으로 현재 디렉토리에 'nohup.out' 파일을 생성합니다.

# 특정 파일로 출력 리다이렉션
nohup ./my_script.sh > output.log &

# 표준 에러도 함께 리다이렉션
nohup ./my_script.sh > output.log 2>&1 &

# 출력 무시
nohup ./my_script.sh > /dev/null 2>&1 &

프로세스 관리

# 실행 중인 프로세스 확인
ps aux | grep "python3 app.py"

# PID 저장
nohup python3 app.py & echo $! > app.pid

# 프로세스 종료
kill $(cat app.pid)

실전 사용 예시

웹 서버 실행

# FastAPI 애플리케이션 실행
nohup uvicorn main:app --host 0.0.0.0 --port 8000 > server.log 2>&1 &

# 로그 실시간 모니터링
tail -f server.log

 

백업 스크립트 실행

# 백업 스크립트 실행
nohup ./backup.sh > backup.log 2>&1 &

# 백그라운드 작업 목록 확인
jobs

 

여러 명령어 연결

# 여러 명령어 실행
nohup sh -c '
 python3 script1.py
 python3 script2.py
 echo "완료"
' > process.log 2>&1 &

 

주의사항과 팁

PID 관리

# 스크립트로 PID 관리
#!/bin/bash
PID_FILE="app.pid"

if [ -f $PID_FILE ]; then
    kill $(cat $PID_FILE) 2>/dev/null
    rm $PID_FILE
fi

nohup python3 app.py & echo $! > $PID_FILE

 

로그 로테이션

# logrotate 설정 예시
/path/to/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

 

메모리 관리

# 메모리 사용량 모니터링
nohup sh -c '
    while true; do
        ps -o pid,ppid,%mem,rss,cmd -p $(cat app.pid)
        sleep 60
    done
' > memory_monitor.log 2>&1 &

 

자동 재시작

# 프로세스 자동 재시작 스크립트
#!/bin/bash
until python3 app.py; do
    echo "프로세스가 종료되었습니다. 3초 후 재시작..." >&2
    sleep 3
done

이러한 nohup의 다양한 사용법을 통해 서버에서 안정적으로 프로세스를 관리할 수 있습니다. 특히 운영 환경에서는 로그 관리와 프로세스 모니터링이 매우 중요하므로, 적절한 로깅 전략과 함께 사용하는 것이 좋습니다.

실제 운영 환경에서의 추천 사항

  1. 항상 로그 파일을 지정하여 사용
  2. PID 파일을 통한 프로세스 관리
  3. 주기적인 로그 로테이션 설정
  4. 메모리 사용량 모니터링
  5. 필요한 경우 자동 재시작 스크립트 구현

nohup은 단순해 보이지만, 서버 운영에 있어 매우 중요한 도구입니다. 적절히 활용하면 안정적인 서버 운영에 큰 도움이 될 것입니다.