반응형
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의 다양한 사용법을 통해 서버에서 안정적으로 프로세스를 관리할 수 있습니다. 특히 운영 환경에서는 로그 관리와 프로세스 모니터링이 매우 중요하므로, 적절한 로깅 전략과 함께 사용하는 것이 좋습니다.
실제 운영 환경에서의 추천 사항
- 항상 로그 파일을 지정하여 사용
- PID 파일을 통한 프로세스 관리
- 주기적인 로그 로테이션 설정
- 메모리 사용량 모니터링
- 필요한 경우 자동 재시작 스크립트 구현
nohup은 단순해 보이지만, 서버 운영에 있어 매우 중요한 도구입니다. 적절히 활용하면 안정적인 서버 운영에 큰 도움이 될 것입니다.
'Linux' 카테고리의 다른 글
리눅스에서 3시간마다 인터넷 속도 자동 측정 시스템 구축하기 (0) | 2025.03.20 |
---|---|
PM2로 Node.js 애플리케이션 관리하기 (0) | 2025.02.18 |
Sudoers : 권한 관리 (1) | 2025.02.02 |