본문 바로가기
🎯 etc/Linux

[ nohup ] 세션이 끊겨도 서버가 계속 실행되도록 설정

by 깸뽀 2022. 12. 14.
728x90

📌 nohup 사용법

$ nohup [프로세스] &

// java -jar파일 예시
// ex) $ nohupb java -jar test.jar &

 

📌 nohup

  • 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊기더라도 프로세스를 계속해서 동작하는 명령어
    • 기본적으로 터미널에서 세션 로그아웃(logout)이 발생하면 리눅스는 해당 터미널에서 실행한 프로세스들에게 HUP signal이 전달하여 종료시기게 됨
    • 이 HUP signal을 프로세스가 무시(ignore)하도록 하는 명령어라 nohup이라는 이름인 것

 

📌 &

  • 프로세스를 실행할 때 백그라운드에서 동작하도록 만드는 명령어
    • &만 붙여도 백그라운드에서 작업을 수행하기는 하지만, 사용자가 터미널 세션을 끊어버리면 백그라운드로 작업중인 작업도 같이 종료가 되어 추후 문데가 생길 소지가 다분함.
  • 옵션설정: nohup
✋  nohup으로 실행할 쉘스크립트파일(*.sh)은 현재 펴미션이 755이상 상태여야 함
     ex) chmod 755 shell.sh

 

📌 nohup.out 

  • nohup 으로 배포 시, nohup.out 파일이 생성됨
  • nohup 명령어는 표준 출력(standard output)을 nohup.out파일로 재지향(redirection) 함
    • 프로세스가 실행되는 동안 stdout으로 출려되는 모든 내용이 nohup.out으로 쌓임 ⇒ log
    • 시간이 오래 지나면 nohupb.out 용량이 커지게 됨 ⇒ 디스크 공간을 낭비할 수도 있음

따라서, 꼭 필요한 로그만 출력하거나, 로그를 남기는 것이 불필요한 경우 재지향을 통해 nohup.out파일을 생성하지 않도록 하는 것이 좋음


 

📌 nohup 실행 시 log 파일 관리

숫자의 의미
     0 : 표준 입력
     1 : 표준 출력
     2 : 표준 에러

 

1. 배포시 nohup.out파일 생성하지 않기

   ⇒ nohup.out 파일을 생성하지 않으려면 표준출력과 표준에러를 /dev/null 로 재지향 해주면 됨

$ nohup [프로세스] 1>/dev/null 2>&1 &

// 예시
// $ nohup java -jar test.jar 1>/dev/null 2>&1 &
  • 1>/dev/null : 표준출력을 사용하지 않겠다는 의미
  • 2>&1 : 표준에러를 표준출력과 같게(/dev/null) 만듬

 

 

 

2. 이미 실행 중인 프로세스의 nohup.out 파일을 0 bytes로 만들기

$ cat /dev/null > nohup.out

 

 

 

3. nohup.out경로 또는 파일명 변경

 

🔸 파일명 변경

$ nohup java -jar test.jar > log.out &
// 또는
$ nohup java -jar test.jar > log.out 2>&1 &

 

🔸 write 덮어쓰기

// ">" ⇒ 덮어쓰기
& nohup [프로세스] > [파일] 2>&1 &

// 예시
// $ nohup java -jar test.jar > /home/ubuntu/test/log.out 2>&1 &

 

🔸 append 이어쓰기

// ">>" ⇒ 이어쓰기
& nohup [프로세스] >> [파일] 2>&1 &

// 예시
// $ nohup java -jar test.jar >> /home/ubuntu/test/log.out 2>&1 &

 

  • > : 덮어쓰기
  • >> : 이어쓰기
  • /home/ubuntu/test/ : 경로
  • log.out : 파일명

 

 

4. 표준 출력과 표준 에러 따로 관리

$ nohup [프로세스] 1>[파일1] 2>[파일2] &

//예시
// $ nohup java -jar test.jar 1>output.log 2>error.log &
  • 1> output.log : 표준 출력을 "output.log"라는 파일에 전달
  • 2> error : 표준 에러를 "error.log"라는 파일에 전달

 

 

 

 

5. nohup으로 실행한 프로세스를 종료

ps -ef | grep [프로세스명]

# PID 식별 후
kill -15 [PID]

# 종료
kill -9 [PID]

// 예시
// ex) ps -ef | grep java
// ex) kill -9 1220

 

 

 

nohup으로 실행한 프로세스 종료

 

📖 참고

 

728x90

댓글