개발/AWS

AWS 배포하기 4 (L2) 서버 실행하기 + 크론등록

Ridiss 2022. 11. 23. 08:39

배포하기 3에서 이어짐

deploy.sh 파일을 열어서 8번 작성

 

# 8. start jar
nohup java -jar Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>${HOME}/err.out &
echo "8. start server complete"

 

여기까지하면 서버 실행하는것까지 완료가 되며 확인하려면

netstat -nlpt  로 확인하면된다.

(만일에 netstat가 없으면 apt install net-tools 로 설치)

 

 

--------크론등록--------

# 9. cron registration 
touch crontab_new
echo "* * * * * ${HOME}/check-and-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
echo "9. cron registration complete"

 

1분마다 check-and-restart.sh를 실행

1>>crontab_new >>의 의미는 덮어씌운다는 의미

 

이후 check-and-restart.sh 파일을 생성하자

vi check-and-restart.sh

파일 생성 후 아래와 같이 입력 후 저장한다.

 

#!/bin/bash

source ./var.sh

if [ -z "$PROJECT_PID" ]; then
	nohup java -jar -Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>{HOME}/err.out &
fi

 

[ -z "$PROJECT_PID" ] -> PROJECT_PID의 길이가 0일경우 실행 

이후 check-and-restart.sh 파일에도 실행권한을 줘야함

chmod u+x check-and-restart.sh

 

그리고  ./deploy.sh 

하면 서비스가 죽어도 크론이 다시 재시작시키는걸 확인할 수 있다.

 

이제 check-and-restart.sh, deploy.sh, var.sh 파일만 있으면 배포/재배포/크론까지 가능

 

 

 

**만일 spring프로젝트를 빌드할떄 test코드 없이 해야할경우 (보통은 있어야함 하나 생성 추천)

./gradlew build -x test

라고 작성하면된다.

 

 

 

deploy.sh 완성본

#!/bin/bash

# 1. env variable
source ./var.sh
echo "1. env variable setting complete"

# 2. cron delete
touch crontab_delete

crontab crontab_delete
rm crontab_delete
echo "2. crontab delete compleate"

# 3. server checking
if [ -n "${PROJECT_PID}" ]; then
  # re deploy
  kill -9 $PROJECT_PID
  echo "3. project kill complete"
else
  # first deploy

  # 3-1 apt update
  sudo apt-get -y update 1>/dev/null

  # 3-2 jdk install
  sudo apt-get -y install openjdk-11-jdk 1>/dev/null
  echo "3-2 jdk install complete"

  # 3-3 timezone
  sudo timedatectl set-timezone Asia/Seoul
  echo "3-3. timezone setting complete"
fi

# 4. project folder delete
rm -rf ${HOME}/${PROJECT_NAME}
echo "4. project folder delete complete"

# 5. git clone
git clone https://github.com/${GITHUB_ID}/${PROJECT_NAME}.git
sleep 3s
echo "5. git clone complete"

# 6. gradlew +x
chmod u+x ${HOME}/${PROJECT_NAME}/gradlew
echo "6. gradlew chmod complete"

# 7. build
cd ${HOME}/${PROJECT_NAME}
./gradlew build
echo "7. gradlew build complete"

# 8. start jar
nohup java -jar -Dspring.profiles.active=prod ${JAR_PATH} 1>${HOME}/log.out 2>${HOME}/err.out &
echo "8. start server complete"

# 9. cron registration
touch crontab_new
echo "* * * * * ${HOME}/check-and-restart.sh" 1>>crontab_new
crontab crontab_new
rm crontab_new
echo "9. cron registration complete"

 

var.sh 완성본

#!/bin/bash

GITHUB_ID="codingspecialist"
PROJECT_NAME="aws-v2-last"
PROJECT_VERSION="0.0.2"
PROJECT_PID="$(pgrep -f ${PROJECT_NAME}-${PROJECT_VERSION}.jar)"
JAR_PATH="${HOME}/${PROJECT_NAME}/build/libs/${PROJECT_NAME}-${PROJECT_VERSION}.jar"

export GITHUB_ID
export PROJECT_NAME
export PROJECT_VERSION
export PROJECT_PID
export JAR_PATH