nohup이란?
"no hangups"라는 의미로 리눅스, 유닉스에서 명령어나 쉘 스크립트 파일(*. sh)을 데몬 형태로 실행시키는 프로그램이다. 데몬 형태로 실행시킨다는 것은, UI 없이 시스템 백그라운드에서 동작하는 프로그램을 지칭한다.
nohup을 사용하는 이유
nohup은 터미널이나 세션이 종료된 후에도 해당 프로세스가 종료되지 않고 지속적으로 동작하게 해준다.
즉 리소스를 끊지 않는 이상, (로컬의 컴퓨터를 종료하거나 인스턴스를 종료하거나 프로세스를 죽이거나 등등)
계속해서 프로세스는 동작하게 된다.
오랜 시간이 걸리는 스크립트나, 항상 켜두어야 하는 서버 등을 배포할 때 주로 사용한다.
사용방법은 프로그램 실행어 앞에 nohup을 붙여주면 되고, 실행 시 실행한 경로에 "nohup.out"이라는 log 파일이 생성된다. 이 파일에는 출력 문자열들이 자동으로 저장된다.
nohup 실행 및 log 파일 생성
만약 jar 파일을 nohup을 이용해 백그라운드에서 실행하고 싶다면 쉘에 다음과 같이 입력하면 된다.
nohup java -jar /home/ec2-user/test.jar &
여기서 &은 백그라운드에서 실행시키라는 의미이다.
log 파일 경로 변경
만약 log 파일을 다른 원하는 파일로 경로를 바꾸고 싶다면 다음과 같이 입력한다.
nohup java -jar /home/ec2-user/test.jar > ~/log/nohup_log.out 2>&1 &
숫자의 의미
0 : 표준 입력, 1 : 표준 출력, 2 : 표준 에러
> ~/log/nohup_log.out
표준 출력(1)의 결과를 ~/log/nohup_log.out 로 전달
2>&1
표준 에러(2)를 표준 출력(1)이 전달되는 곳( ~/log/nohup_log.out )으로 동일하게 전달
기존 log 파일 이어쓰기
// ">>" - append - 이어쓰기
$ nohup [실행파일] >> [파일] 2>&1 &
nohup java -jar /home/ec2-user/test.jar >> ~/log/nohup_log.out 2>&1 &
표준 출력과 표준 에러를 따로 관리
nohup [실행파일] 1>[파일1] 2>[파일2] &
nohup java -jar /home/ec2-user/test.jar 1>output.log 2>error.log &
1 > output.log
표준 출력을 "output.log"라는 파일에 전달
2 > error.log
표준 에러를 "error.log"라는 파일에 전달
원하는 날짜마다 nohup.out 새롭게 생성하기
nohup.sh 스크립트 만들기
~/log 경로에 스크립트를 만들어준다.
#!/bin/bash
file=~/log/log.out //로그 파일
date=`date+%y%m%d-%H$M$S` //저장 날짜
filePath= ~/log/logHistory/log.$date.out // 저장 경로
cp "$file" "$filePath" //log.out 복사
echo "백업완료 cp $file $filePath" //print
cat /dev/null > "$file" //내용 지우기
fi
echo "***************************"
crontab 등록하기
위에서 생성한 스크립트를 특정 시간마다 실행시켜주는 설정을 crontab으로 해준다.
아래 명령어로 crontab 편집기를 켜주고
crontab -e
아래 내용을 입력해준다.
59 23 * * * sudo sh ~/log/nohup.sh
매일 23시 59분에 nohup.sh를 root 권한으로 실행 시킨다는 의미이다.
crontab -l
위 명령으로 등록된 작업들을 확인 가능하다.
백그라운드로 실행한 프로세스 종료하기
ps -ef | grep jar
위 명령어로 내가 실행한 jar 파일을 찾는다.
sudo kill -9 {processID}
이후 프로세스 아이디를 넣어 종료시켜준다.
reference
'🛠️TOOL > 📄Linux' 카테고리의 다른 글
[Linux] - 리눅스 프로세스가 killed 되었을 때의 원인 찾는 법 (0) | 2024.01.01 |
---|---|
[Linux] - wget의 개념과 사용 예시 (0) | 2023.12.14 |
[WSL2] - Vmmem 램(RAM) 점유율 이슈 해결하기 (0) | 2023.10.25 |
[Linux] systemctl 명령 에러 System has not been booted with systemd as init system (PID 1). (0) | 2023.10.21 |
[Linux] - sudo apt update시 error: "Release file is not yet valid" (0) | 2023.10.05 |