[Linux] nohup 명령어 정리

개요

nohup 명령어 사용방법과 nohut.out 로그 관련 설정 및 nohup 프로세스 종료하는 방법에 대해 다뤄볼거다.


목차

  1. nohup 설명
  2. nohup.out 로그 파일 관리
  3. nohup.out 날짜 별로 rotation 하기
  4. nohup 프로세스 죽이기

nohup 설명

1. nohup ?

“no hangups” 라는 의미로 리눅스 , 유닉스에서 명령어 또는 쉘 스크립트 파일 (*.sh)을 데몬 형태로 실행 시키는 프로그램이다.

nohup을 사용하는 이유

nohup 프로그램은 터미널이나 세션이 종료되어도 해당 프로세스가 종료되지 않고 계속 동작하여 진행한 작업이 완료될 때까지 수행할 수 있도록 도와줌.

작업 시간이 오래 걸리는 스크립트나 명령어 사용할 때 유용하다.

주의사항

nohup으로 스크립트 파일(*.sh) 파일을 실행한다면 실행할 스크립트 파일은 퍼미션이 755 이상 상태여야 한다!

chmod 755 [스크립트 파일]

nohup.out 관리

1.nohup 실행 시 log 파일 생성

log 파일은 nohup 명령을 실행한 위치에 ‘nohup.out’ 파일로 생성된다.

만약 nohup 명령어로 내가 작성한 스크립트 파일을 실행하였는데 명령어 실행 시 “exit”가 나온다면 작성한 스크립트 파일에 문제가 있는 것!


테스트를 위해 jar 파일을 백그라운드로 실행해보자.


사용방법

$ nohup [실행파일] &

예시

$ nohup java -jar ./*.jar &

[3] 8448
nohup: ignoring input and appending output to 'nohup.out'

실행 파일

  • 실행하고자 하는 프로세스
  • 스크립트인 경우 파일의 권한이 755 이상이어야 한다.

&

  • 프로세스 실행 시 백그라운드에서 동작하도록 만드는 명령어
  • nohup 은 포어그라운드로 동작하기에 & 을 뒤에 작성해 백그라운드로 동작하게끔 해주어야 한다!

2.nohup 실행 시 log 파일 생성하지 않기

log 파일을 생성하지 않으려면 백그라운드 실행과 출력을 /dev/null로 보내는 명령어를 사용하면 된다.


사용방법

$ nohup [실행파일] 1>/dev/null 2>&1 &

예시

$ nohup java -jar ./*.jar 1>/dev/null 2>&1 &

숫자의 의미

  • 0 : 포준 입력
  • 1 : 표준 출력
  • 2 : 표준 에러

1 > /dev/null

표준 출력의 결과를 /dev/null(휴지통)로 전달


2>&1

표준 에러를 표준 출력이 전달되는 곳(/dev/null)으로 동일하게 전달


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

“>” 또는 “>>” 와 같은 리다이렉션을 이용해 다른 파일에 출력할 수 있음

경로 변경 시에는 해당 폴더 생성 후 실행

No such file or directory 에러가 발생할 수 있음


3-1. write 덮어쓰기

사용방법

# ">" - write - 덮어쓰기
$ nohup [실행파일] > [파일] 2>&1 &

예시

$ nohup java -jar ./*.jar > test_log.out 2>&1 &

3-2. append 이어 쓰기

사용방법

$ nohup [실행파일] >> [파일] 2>&1 &

예시

$ nohup java -jar ./*.jar >> test_log.out 2>&1 &

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

표준 출력에 대한 로그와 , 표준 에러에 대한 로그를 따로 관리하고 싶다면 아래와 같은 명령어를 사용하면 된다.

사용방법

$ nohup [실행파일] 1>[표준출력파일] 2>[표준에러파일] &

예시

$ nohup java -jar ./*.jar 1>./output.log 2>./error.log

nohup.out 날짜 별로 rotaion 하기

1. nohup 실행하기

nohup 를 실행하여 nohup.out 생성하기

nohup java -jar *.jar &

2. nohup.sh 만들기

설정 파일은 nohup.out 안에 내용이 있을 때만 rotaion 하는 방법으로 진행

#!/bin/bash

# 로그파일
FILE='/home/ljh/nohup/nohup.out' 

# 저장할 날짜
DATE="$(date '+%y%m%d-%H%M%S')"

# 저장할 경로
FILE_PATH="/home/ljh/nohup/nohupHistory/nohup.${DATE}.out"

# 파일 용량이 0보다 크면 rotaion
if [[ -s ${FILE} ]]
then
  cp "${FILE}" "${FILE_PATH}" # 1. nohup.out 복사
  echo "백업완료 cp ${FILE} ${FILE_PATH}" # 2. print
  cat /dev/null > "${FILE}" # 3. nohup.out 비우기
else
  echo "no backups"
fi

-s ${file}

“-s” “${FILE}” 는 지정한 파일이 존재하고 0 size 파일이 아닌지 체크하는 옵션임.

해당 파일이 존재하고 파일의 사이즈가 0보다 클 경우 true 반환


nohup 프로세스 종료

1. PID 찾기

$ ps aux | grep "v1.*.jar" | grep -v "grep"

ubuntu      8551 26.0 12.1 2298284 120244 pts/0  Sl   05:02   0:06 java -jar ./v1-0.0.1-SNAPSHOT.jar

2. 해당 프로세스 종료

$ kill -KILL $(ps aux | grep "v1.*.jar" | grep -v "grep" | awk '{print $2}')

easyupclass - https://easyupclass.e-itwill.com/course/course_view.jsp?id=74&rtype=0&ch=course

관련 글

지식 공유3분 읽기

[Linux] Ubuntu 24.04 -> Rocky 10 마이그레이션

개요 기존 홈서버에서 운영 중인 Ubuntu 24.04 서버의 모든 서비스( Docker , Gatsby , 데이터 등등)를 새로운 Rocky 서버로 누락 없이 이관하기 위한 과정을 기록해보려고 합니다. 사전 준비 작업 전에, 양쪽...

리눅스
지식 공유3분 읽기

[Linux] 테스트 서버 디스크 장애 이슈

개요 OS : Rocky 8.10 디스크 구성 /dev/sda : 메인 디스크 /dev/sdb : 백업 디스크 상황 평소에 서버 로그에 READ sda .... , swap 관련 메시지가 간간히 보였음. 어느 날 I/O 관련 로그가...

리눅스
지식 공유1분 읽기

[Linux] SSH Keygen으로 원격 접속 키 생성하기

SSH Key 인증? SSH Key 인증은 비대칭 암호화라는 방식을 사용합니다. 한 쌍의 키(Key Pair)를 생성하여 하나는 내가 가지고 있고(개인 키, Private Key), 하나는 서버에 등록(공개 키, Public Key)...

리눅스