개요
nohup
명령어 사용방법과 nohut.out 로그 관련 설정 및 nohup 프로세스 종료하는 방법에 대해 다뤄볼거다.
목차
- nohup 설명
- nohup.out 로그 파일 관리
- nohup.out 날짜 별로 rotation 하기
- 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