Profile picture

[Linux] nohup 명령어 정리

JaehyoJJAng2023년 03월 15일

개요

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


Loading script...