본문 바로가기
Linux

Linux nohup과 &의 역할 및 표준 출력과 표준 오류 파일 처리

by codeok 2024. 11. 19.
반응형

Spring boot의 Jar를 리눅스 서버 또는 윈도우 bash에서 직접 실행하는 경우가 종종 있습니다.

nohup java -jar 이름.jar & 명령어로 실행을 하는데 nohup과 &(엠퍼샌드)의 역할과 nohup 실행 시 표준 출력과 표준 오류 처리 방법이 궁금해서 정리를 했습니다.

nohup과 &의 역할 및 하단 상황별 표준 출력과 표준 오류 파일 처리 방법을 정리했습니다.

  • nohup.out 기본 생성
  • 표준 출력만 파일 생성
  • 표준 오류만 파일 생성
  • 표준 출력과 표준 오류 파일 모두 생성
  • 표준 출력과 표준 오류 파일 모두 생성 X

 

nohup의 역할 - 세션 독립성

nohup(no hang up)은 터미널 세션 종료 후에도 프로세스를 계속 실행하기 위한 명령어입니다.

  • 기본적으로 터미널을 닫으면 해당 세션에서 실행 중인 프로세스는 종료됩니다.
  • nohup은 SIGHUP(Signal Hangup) 신호를 무시하도록 설정하여, 세션 종료 후에도 프로세스가 계속 실행되도록 합니다.
  • 출력은 디폴트로 nohup.out 파일에 저장이 됩니다. (출력 리디렉션으로 변경 가능)

 

&의 역할 - 백그라운드 실행

&는 백그라운드에서 명령어를 실행하도록 하는 쉘 연산자입니다.

  • 명령어를 실행한 터미널을 차단하지 않고, 즉시 제어권을 사용자에게 반환합니다.
  • 표준 입력, 출력, 오류는 기본적으로 터미널에 연결된 상태입니다.
  • 세션 종료 시 프로세스는 기본적으로 종료됩니다.(단 nohup과 함께 사용하면 종료되지 않음)

 

nohup.out 기본 생성

nohup은 출력(stdout)과 오류(stderr)를 기본적으로 nohup.out 파일에 작성합니다.

하단 명령어를 실행하면 현재 디렉토리에 nohup.out 파일이 생성됩니다.

nohup java -jar myapp.jar &

 

표준 출력만 파일 생성

표준 출력만 출력 리디렉션(>)으로 파일인 output.log에 남기는 방법입니다.

표준 오류의 경우에는 따로 리디렉션 처리하지 않았기에 파일에 남지 않고 &로 백그라운드에서 실행을 했기에 콘솔에도 남지 않습니다.

nohup java -jar myapp.jar > ouput.log &

 

 

다른 방법으로인 /dev/null을 사용해서 표준 출력만 파일 생성하는 방법을 보여드리겠습니다.

/dev/null은 리눅스 및 유닉스 시스템에서 사용한 특수한 명령어로 데이터를 버리는 용도로 사용합니다.

표준 출력만 출력 리디렉션(>)으로 ouput.log에 남기고

표준 오류는 오류 출력 리디렉션인(2>)으로 /dev/null로 데이터를 버리기에 오류 로그와 콘솔에 생성되지 않습니다. 

nohup java -jar myapp.jar > output.log 2> /dev/null &

 

표준 오류만 파일 생성

표준 출력은 출력 리디렉션(>)으로 /dev/null에 파일과 콘솔에 남기지 않고 버리고,

표준 에러는 에러 리디렉션(2>)으로 error.log 파일에 남기는 방법입니다.

nohup java -jar myapp.jar > /dev/null 2> error.log &

 

 

표준 출력과 표준 오류 파일 모두 생성

표준 출력과 표준 오류 파일 모두 생성하는 방법입니다.

표준 출력은 리디렉션(>)으로 파일인 online.log에 남고,

표준 오류는 2>&1로 표준 오류(stderr)를 표준 출력(stdout)으로 병합을 해서 online.log에 남기는 방법입니다.

표준 출력과 표준 오류 모두를 파일에 남길 때 사용합니다.

nohup java -jar myapp.jar > output.log 2>&1 &

 

 

표준 출력과 표준 오류 파일 모두 생성 X

표준 출력과 표준 오류 파일 모두 생성하지 않는 방법입니다.

표준 출력과 표준 오류 둘 다 > /dev/null과 2>&1 명령어로 사용하지 않고 버리니 파일이 생성되지 않습니다.

nonohup java -jar myapp.jar > /dev/null 2>&1 &

 

 

정리

nohup과 &의 역할과 표준 출력과 표준 에러를 상황별로 파일을 남기는 방법을 정리했습니다.

 

 

감사합니다.

반응형

'Linux' 카테고리의 다른 글

Linux scp ssh key 인증  (0) 2025.01.18