메타코딩 유튜브를 참고하여 정리한 내용입니다.
프로젝트 배포 - 시간 설정 (여러가지)
다만, 지금까지는 자동 재시작이 되지 않았다. 직접 재시작 해야했다.
cron을 이용하면 자동 재시작 할 수 있다.
crontab
: 주기적 실행 멸령어
✔️ cron 예시
* * * * * ls -l 1>>cron.log
(1은 생략 가능하다.)
cron.log
로 보내라1
은 생략 가능하다.>>
: ls -l
결과가 cron.log
밑 라인에 계속 추가가 된다.* 3, 4 * *
3~6
실행 결과
✔️ vi job.sh
ls -l >> /home/ubuntu/cron.log
: 현재 ls -l
결과를 cron.log
끝 부분으로 옮겨라
✔️ vi myScript.sh
: myScript 편집기
crontab -l 1>crontab_new
: crontab 내용을 crontab_new 파일로 옮긴다.echo "* * * * * /home/ubuntu/job.sh" 1>>crontab_new
: crontab_new 파일에 echo의 내용을 추가한다. (끝 라인에 추가된다.)crontab crontab_new
: crontab에 crontab_new에 작성한 내용을 반영한다. rm crontab_new
: crontab_new 파일을 삭제한다.
cron을 작동시키기 위해 crontab 설정해야 한다.
crontab -e
: crontab 편집
스크립트 실행시 crontab에 자동 등록되게 하고 싶다.
(1) crontab -l 1>crontab_new
crontab -l
: crontab -e 내용을 출력해준다.crontab -l
결과를 crontab_new 파일에 옮긴다.(2) echo "* * * * * /home/ubuntu/job.sh" 1>>crontab_new
(3) crontab crontab_new
crontab_new
파일을 실행한다. (1), (2)이 실행된다.(4) rm crontab_new
실행 결과
./myScript.sh
실행
crontab -e
실행
"* * * * * /home/ubuntu/job.sh"
가 crontab에 추가되었다.
1분이 지나고, cron.log
파일이 생성되었다.
cron.log
파일 실행해보면, 1분마다 ls -l
결과가 끝 부분에 추가된다.
사전에 서버가 실행된 상태여야 한다.
✔️ 서버 종료시키기
vi spring-stop.sh
✔️ 서버 실행하기
vi if문 명령어
vi spring-restart.sh
✔️ 종료된 상태에서 재시작할 경우, 서버 시작되게 하기
vi spring-restart.sh
echo "스프링 재시작 - $date" 1>>/home/ubuntu/cron-restart/spring-restart.log
/home/ubuntu/cron-restart/spring-restart.log
에 시간이 저장된다.nohup java -jar $SPRING_PATH 1>log.out 2>error.out &
log.out
에 실행된 로그를 저장error.out
에 실행된 로그를 저장
spring-restart.sh 실행하기
./spring-restart.sh
: 현재 스프링이 종료된 상태에서 실행했으므로 서버가 재시작된다.
spring-restart.log
에 (재시작 할 때)시간이 저장된다.
서버가 종료될 시, 자동 재시작해보자!
서버를 배포하기 위해서는 위와 같이 명령어를 다 입력해야 한다.
이제는 명령어들을 vi 편집기에 저장하여, 자동으로 실행해보자!
vi deploy.sh
(chmod u+x deploy.sh
: 사용자에게 실행 권한 주기)
이제 서버가 종료될 시, 자동 재시작이 될 것이다.
✔️ 서버를 종료 1분 지난 후, 서버가 자동으로 다시 실행된다.
./spring-stop.sh
로 서버를 종료했다.
1분이 지나니, 서버가 자동 재실행된다.
이제 deploy.sh
을 실행하면 spring-restart.sh
가 Clone에 등록된다.
✔️ 재배포 하는 방법
1. 기존 서버를 중지 시켜야 한다.
spring-stop.sh → 실행권한을 준다.
- echo "Springboot Stop..."
- SPRING_PID=$(pgrep -f v1-0.0.1-SNAPSHOT.jar)
- echo $SPRING_PID
- kill -9 $SPRING_PID
2. aws-v1 폴더를 통째로 삭제해야한다.
- rm -r /home/ubuntu/aws-v1
3. git clone 다운
- git clone 주소
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 /home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &
7. cron으로 자동 재시작
deploy.sh에서
echo "crontab 등록 - spring restart..."
crontab -l > crontab_new
echo "* * * * * /home/ubuntu/cron-restart/spring-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
➡️ 이 전체를 재배포 스크립트에 작성하여, 위 코드를 한 번에 실행할 수 있게 하면 좋다. (redeploy.sh
)
하나의 배포 스크립트를 만들어두면 좋다.
(1) 기존 서버를 중지 시키기
./spring-stop.sh
(2) aws-v1 폴더를 통째로 삭제
(3) git clone 다운로드
(4) gradlew 실행 권한주기
(5) 빌드하기
./gradlew build
(6) jar 실행하기
nohup java -jar /home/ubuntu/aws-v1/build/libs/v1-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &
(7) cron으로 자동 재시작
vi deploy.sh
에 명령어 등록
echo "crontab 등록 - spring restart..."
crontab -l > crontab_new
echo "* * * * * /home/ubuntu/cron-restart/spring-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
ps -ef
: 실행한 프로세스 번호 알아냄
kill 프로세스 번호
: 서버 종료
1분 지난 후
💡 참고
(2)~(7)번까지 서버가 멈춰있다. 즉, 재배포를 하게되면 서버는 멈춘다.
- 배포하고 있을 때도, 서버를 멈추지 않게 하는 방법은? (나중에 알아본다.)
- 재배포시에 ec2를 새로 생성해서 거기에 재배포를 하면 JDK 설치, apt update, crontab도 다시 등록해야 한다.
- 배포가 잘됬으면 기존 서버를 종료시켜야 한다.