一、使用方法
将脚本上传至jar包同级目录,运行shell脚本,自动查找同名jar包,并且停止,自动运行新jar包。
二、shell脚本
#!/bin/bash
# spring-boot-deploy.sh - 自动化部署Spring Boot应用
# 使用说明:将此脚本与Jar包放在同一目录,运行 ./spring-boot-deploy.sh 或者 sh spring-boot-deploy.sh
# ===== 用户配置区 =====
APP_NAME="tendersmi-main-2.0.0-SNAPSHOT" # 应用名称(必须修改)
JAVA_OPTS="-Xmx512m" # JVM参数
SPRING_OPTS="" # Spring参数(如:--spring.profiles.active=prod)
# =====================
# 获取当前目录
DEPLOY_DIR=$(pwd)
# 检查是否传入新Jar文件名
if [ -n "$1" ]; then
NEW_JAR="$1"
else
# 自动查找目录中最新的Jar文件
NEW_JAR=$(ls -t *.jar | head -1)
fi
# 检查Jar文件是否存在
if [ ! -f "$NEW_JAR" ]; then
echo "错误:未找到Jar文件!"
exit 1
fi
echo "================================================"
echo "开始部署 ${APP_NAME}"
echo "部署目录: ${DEPLOY_DIR}"
echo "新Jar文件: ${NEW_JAR}"
echo "================================================"
# 1. 查找旧进程并停止
echo ">> 停止旧服务..."
PID=$(pgrep -f "java.*${APP_NAME}")
if [ -n "$PID" ]; then
echo "发现运行中的进程: $PID"
kill $PID
# 等待最多10秒直到进程停止
for i in {1..10}; do
if ! ps -p $PID > /dev/null; then
echo "进程 $PID 已停止"
break
fi
sleep 1
echo "等待进程停止...(${i}/10)"
done
# 强制停止如果仍未退出
if ps -p $PID > /dev/null; then
echo "强制停止进程 $PID"
kill -9 $PID
fi
else
echo "未找到运行中的进程"
fi
# 2. 备份旧版本(按日期时间戳) 不生效移除了
# 3. 重命名新Jar为应用名
APP_JAR="${APP_NAME}.jar"
if [ ! "$NEW_JAR" = "$APP_JAR" ]; then
echo "重命名: ${NEW_JAR} -> ${APP_JAR}"
mv "$NEW_JAR" "$APP_JAR"
fi
# 4. 启动新服务
echo ">> 启动新服务..."
nohup java $JAVA_OPTS -jar $APP_JAR $SPRING_OPTS > console.log 2>&1 &
# 5. 检查启动状态
echo ">> 检查启动状态..."
sleep 3 # 等待进程启动
NEW_PID=$(pgrep -f "java.*${APP_NAME}")
if [ -n "$NEW_PID" ]; then
echo "================================================"
echo "✅ 部署成功! 应用已启动"
echo "PID: $NEW_PID"
echo "日志: tail -f ${DEPLOY_DIR}/console.log"
echo "控制台: nohup.out"
echo "================================================"
else
echo "================================================"
echo "❌ 启动失败! 请检查日志"
echo "查看日志: tail -f ${DEPLOY_DIR}/console.log"
echo "================================================"
exit 2
fi