코딩기록

4. cron을 통한 지속적 배포 직접 구축하기 본문

인프라/리눅스, AWS

4. cron을 통한 지속적 배포 직접 구축하기

빌럽스 2023. 12. 27. 16:49

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