코딩기록
4. cron을 통한 지속적 배포 직접 구축하기 본문
cron을 통해 매 분마다 스프링 프로세스 종료 여부를 확인하고, 종료되었다면 해당 서버를 재시작 하는 스크립트를 제작한다.
향후 AWS 엘라스틱빈스톡/도커를 사용하면 아래 코드를 작성할 일은 거의 없다고 하나, 직접 코드를 작성함으로써 절차를 이해하였다.
<참고>
$변수 -> 변수의 값을 출력 혹은 실행
$(명령어) -> 명령어의 결과를 리턴
cron
crontab -e
추가
* * * * * ls -l 1>>cron.log
* * * * * = 분 시간 일 월 요일 = 매 시간에 실행을 하겠다는 이야기
꺽쇄 1개는 덮어쓰기 2개는 더하기 (append)
/home/ubuntu에 생김 cron.log
crontab -l : 크론탭에 있는 글자를 그대로 화면으로 출력
crontab -l 1>crontab_new : crontab_new 새로운 파일 생성
crontab xxx: xxx를 크론탭으로 실행 및 crontab에 xxx 내용 등록
myScrips.sh 스크립트 내용
crontab -l 1>crontab_new
echo "* * * * * /home/ubuntu/job.sh" 1>>crontab_new
crontab crontab_new
job.sh 스크립트 내용
ls -l > /home/ubuntu/cron.log
cron.log(결과물) 파일내용
drwxrwxr-x 7 ubuntu ubuntu 4096 Dec 18 14:46 aws-v1
-rw-rw-r-- 1 ubuntu ubuntu 0 Dec 18 21:28 cron.log
-rw-rw-r-- 1 ubuntu ubuntu 919 Dec 18 21:27 crontab_new
-rwxrw-r-- 1 ubuntu ubuntu 30 Dec 18 21:27 job.sh
-rwxrw-r-- 1 ubuntu ubuntu 99 Dec 18 21:24 myScript.sh
-rw------- 1 ubuntu ubuntu 38 Dec 18 15:03 nohup.out
…
(참고용)
v1-0.0.1-SNAPSHOT.jar
nohup java -jar /home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &
spring-restart.sh 스크립트 내용
SPRING_PID=$(pgrep -f v1-0.0.1-SNAPSHOT.jar)
SPRING_PATH="/home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar"
echo $SPRING_PID
echo $SPRING_PATH
if [ -z "$SPRING_PID" ]; then # pgrep으로 스프링 프로세스를 찾지 못한 경우 = 즉, 스프링이 실행되지 않은 경우
echo "스프링 종료된 상태"
echo "스프링 재시작 - $(date)" 1>>/home/ubuntu/cron-restart/spring-restart.log
nohup java -jar $SPRING_PATH 1>log.out 2>err.out &
else
echo "스프링 시작된 상태"
fi
spring-stop.sh 스크립트 내용
echo "SPRINGBOOT STOP...."
SPRING_PID=$(pgrep -f v1-0.0.1-SNAPSHOT.jar)
echo $SPRING_PID
kill -9 $SPRING_PID
deploy.sh 스크립트 시나리오
#1. 배포 프로세스
echo "deploy start..."
echo "1. JDK install"
echo "2. github project download"
echo "3. gradlew 실행권한 추가"
echo "4. project 빌드하기"
echo "5. ubuntu timezone setting 하기"
echo "6. nohup으로 springboot 실행시키기"
#2. 스프링부트 종료 시 재시작 cron 내용
echo "crontab 등록 springboot restart..."
crontab -l >crontab_new
echo "* * * * * /home/ubuntu/cron-restart/spring-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
'인프라 > 리눅스, AWS' 카테고리의 다른 글
6. AWS 엘라스틱빈스톡 사용해보기 (0) | 2023.12.28 |
---|---|
<리눅스 if 문 조건 정리> (0) | 2023.12.27 |
3. 우분투 서버에 깃허브 클론 및 설정 세팅 (1) | 2023.12.27 |
2. 우분투 사용 방법 (1) | 2023.12.26 |
1. 리눅스 명령어 정리 (1) | 2023.12.26 |