实用可靠的springBoot启动shell脚本

493 阅读1分钟

该文全是干货,不拖泥带水,springboot部署脚本下边已经列出。 本文涵盖了springBoot jar包的备份和重启,启动后会检测springboot是否成功启动 建议springboot开放一个不需要登录的健康检测接口,也可以引入springBoot自带的健康状态检测的依赖包 我这里是自己写了一个开放的接口,在接口中测试了redis和mysql服务是否正常,如果正常,我则认为系统是重启成功了 http://localhost:$PORT/check/health //我的测试接口,返回内容是200表示一切正常,返回数字1表示数据库异常,返回数字2表示redis异常

#根据你springBoot的环境
sh deploy.sh dev

image.png

#!/bin/bash
ENV=$1
NEW_VERSION_PATH="/Users/camel/Desktop/build/new-version/office.jar"
RUNNING_VERSION_PATH="/Users/camel/Desktop/build/office.jar"
BAK_DIR="$(dirname $RUNNING_VERSION_PATH)/bak"
PID=$(pgrep -f "$RUNNING_VERSION_PATH")

if [ -z "$ENV" ]; then
  echo "Please provide an environment argument (e.g. dev or prod)"
  exit 1
elif [ "$ENV" != "dev" ] && [ "$ENV" != "prod" ]; then
  echo "Invalid environment argument. Must be 'dev' or 'prod'"
  exit 1
elif [ "$ENV" = "dev" ]; then
  PORT=8234
elif [ "$ENV" = "prod" ]; then
  PORT=8165
fi

if [ ! -d "$BAK_DIR" ]; then
  echo "Creating backup directory: $BAK_DIR"
  mkdir "$BAK_DIR"
fi

if [ -z "$PID" ]; then
  echo "Running version is not currently running. Skipping stop."
else
  echo "Stopping running version with PID $PID"
  kill "$PID"
  sleep 3
fi
if [ ! -f "$NEW_VERSION_PATH" ]; then
  echo "New version not found. Starting running version."
else
  echo "Backing up running version to $BAK_DIR"
  mv "$RUNNING_VERSION_PATH" "$BAK_DIR/$(basename $RUNNING_VERSION_PATH).$(date +%Y-%m-%d-%H-%M-%S)"
  echo "Copying new version to $RUNNING_VERSION_PATH"
  cp "$NEW_VERSION_PATH" "$RUNNING_VERSION_PATH"
fi

echo "Starting new version"
nohup java -jar "$RUNNING_VERSION_PATH" --spring.profiles.active="$ENV" >/dev/null 2>&1 &
echo "Starting the application,the port is $PORT, please wait..."
retry=0
while [[ $retry -lt 15 ]]; do
    if pgrep -f "$RUNNING_VERSION_PATH" > /dev/null ; then
        status=$(curl -s http://localhost:$PORT/check/health)
        echo "status: $status"
        if [[ "$status" == 200 ]]; then
            echo "Deployment successful"
            exit 0
            break
        elif [[ "$status" == 1 ]]; then
            echo "Deployment failed: database error"
            exit 1
        elif [[ "$status" == 2 ]]; then
            echo "Deployment failed: Redis error"
            exit 1
        fi
    fi
    echo "Checking Spring Boot health...";
    sleep 2
    retry=$((retry+1))
done
echo "Deployment failed: timeout"
exit 1