본문 바로가기

:SERVER/AWS

[easyupclass] cron 명령어를 이용한 주기적 실행

반응형

1. cron 개념과 실습
 1) crontab -e 명령어를 실행.
     nano/vi/vim 중에서 선택해야 할 수도 있다
 2) i 키를 눌러서 insert 모드로 들어가서 하단으로 이동한다
 3) * * * * * ls -l 1>>cron.log 를 입력 후 저장한다
    오른쪽 화살표를 1개: 덮어쓰기
    오른쪽 화살표를 2개: append(추가)


[cron 사용법]
* * * * * : 매분 실행
1 * * * * : 매 1분마다 실행 (ex: 12:01, 13:01 마다 실행..)
1 3 * * * : 매일 3시 1분마다 실행
5 3,4 * * * : 매일 3시 5분, 4시 5분마다 실행
* 3-6 * * * : 매일 3시에서 6시사이에 실행
첫번째 ~ 다섯번째 자리의 의미 : 차례대로 분(0-59) / 시간(0-23) / 일(1-31) / 월(1-12) / 요일(0-7)


1)
vi myscript.sh
i키 입력
# crontab 내용을 crontab_new 파일로 옮긴다
crontab -l 1>crontab_new
# crontab_new 파일에 echo 내용을 추가한다
echo "* * * * * /home/ubuntu/job.sh" 1>>crontab_new
# crontab에 crontab_new에 작성한 내용을 반영한다
crontab crontab_new
# crontab_new 파일을 삭제한다
rm crontab_new
esc키 입력
:wq
./myscript.sh

2)
vi job.sh
i키 입력
ls -l >/home/ubuntu/cron.log
esc키 입력
:wq

3)
chmod u+x job.sh
# crontab -l 명령어 : crontab에 있는 내용을 그대로 출력해준다


2. cron을 이용해서 종료된 스프링 서버를 자동으로 재시작

 - 스프링 서버 종료하는 스크립트(spring-stop.sh) 생성
echo "SPRINGBOOT STOP..."
SPRING_PID=$(pgrep -f v1-0.0.1-SNAPSHOT.jar)
kill -9 $SPRING_PID
esc key
:wq

 - 스크립트 실행권한 주고난 후 실행
chmod u+x shpring-stop.sh
./spring-stop.sh

 - 스프링 서버를 재시작 하는 스크립트(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
  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


 - srping-restart.sh 스크립트를 cron에 등록하기. 
# 배포 프로세스(최초)
echo "deploy start..."
echo "1. JDK install"
echo "2. github project download"
echo "3. gradlew 실행권한 주기"
echo "4. project build 하기'
echo "5. ubuntu timezone 설정하기"
echo "6. nohup으로 springboot 실행시키기"
# 스프링 서버 종료 시 재시작
echo "crontab 등록 spring restart.."
crontab -l > crontab_new
echo "* * * * * /home/ubuntu/spring-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
esc 키
:wq

 - 스크립트 실행권한 주고난 후 실행
chmod u+x deply.sh
./deploy.sh


redeploy.sh
재배포 프로세스 이해하기
1. 기존 서버 중지
SPRING_PID=$(prep -f v1-0.0.1-SHAPSHOT.jar)
kill -9 $SPRING_PID
2. 다운로드 받은 github 폴더 삭제
rm -r /home/ubuntu/aws-v1
3. git clone 다운로드
git clone https://github.com/codingspecialist/aws-v1-git 

4. gradlew 실행 권한주기
cd /home/ubuntu/aws-v1
chmod u+x gradlew
5. 빌드하기
./gradlew build
6. jar 실행
cd /home/ubuntu/aws-v1/build/libs
nohup java -jar v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out
7. cron으로 자동 재시작
crontab -l > crontab_new
echo "* * * * * /home/ubuntu/spring-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new


최초 배포인 경우 최초 프로세스로 실행되고,
두번째 이상인 배포인 경우 재배포 프로세스로 실행되도록 한다


<if 문 구조>
if []; then
else
fi

<if문 조건 옵션>
-z: 문자열의 길이가 0이면 참
-n: 문자열의 길이가 0이 아니면 참
-eq: 값이 같으면 참
-ne: 값이 다르면 참
-gt: 값1>값2
-ge: 값2 >= 값2
-lt: 값1<값2
-le: 값1<=값2
-a: && 연산과 동일. and 연산
-o: || 연산과 동일. xor 연산
-d: 파일이 디렉토리면 참
-e: 파일이 있으면 참
-L: 파일이 심볼릭 링크이면 참
-r: 파일이 읽기 가능하면 참
-s: 파일의 크기가 0보다 크면 참
-w: 파일이 쓰기 가능하면 참
-x: 파일이 실행가능하면 참


출처: 이지업클래스 | 개발자를 위한 AWS DevOps 입문 [CI/CD 무중단 배포]
https://easyupclass.e-itwill.com/course/course_view.jsp?id=74&rtype=0&ch=course

반응형