📋 概述
这是一个用于 Linux 环境下自动化部署 Java JAR 包的 Shell 脚本,支持停止旧进程、启动新进程,并包含进程检测和超时处理机制。
⚙️ 配置参数
使用前只需修改以下三个参数:
| JAR_PATH | JAR 包所在目录路径 | /usr/local/project/java |
| JAR_NAME | JAR 包文件名 | system-service.jar |
| LOG_FILE | 日志输出文件名 | system.log |
🔄 执行流程
┌─────────────────────────────────────┐
│ 开始更新部署 │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 检查 JAR 文件是否存在 │
│ (不存在则退出) │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 停止旧进程 │
│ • 查找运行中的进程 PID │
│ • 发送 kill 信号 │
│ • 等待最多 30 秒 │
│ • 超时则强制终止 (kill -9) │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 启动新进程 │
│ • 使用 nohup 后台运行 │
│ • 等待 2 秒验证启动状态 │
│ • 输出新进程 PID │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 更新完成 │
└─────────────────────────────────────┘
📝 完整脚本
#!/bin/bash
# ============================================
# Java JAR 包自动部署脚本
# ============================================
# ———- 配置区域(按需修改)———-
JAR_PATH="/usr/local/project/java"
JAR_NAME="system-service.jar"
LOG_FILE="system.log"
FULL_JAR_PATH="${JAR_PATH}/${JAR_NAME}"
# 检查新Jar包是否存在
if [ ! -f "$FULL_JAR_PATH" ]; then
echo "错误:未找到Jar文件 $FULL_JAR_PATH"
exit 1
fi
# 停止旧进程函数
stop_old_process() {
# 查找正在运行的Jar进程
PID=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
echo "未找到正在运行的进程"
else
echo "正在停止进程 $PID …"
kill $PID
# 等待进程结束(最多30秒)
TIMEOUT=30
while [ $TIMEOUT -gt 0 ]; do
if ps -p $PID > /dev/null; then
sleep 1
((TIMEOUT—))
else
break
fi
done
# 强制终止(如果正常终止失败)
if ps -p $PID > /dev/null; then
echo "强制终止进程 $PID"
kill -9 $PID
fi
echo "进程已停止"
fi
}
# 启动新进程函数
start_new_process() {
echo "正在启动新进程…"
cd $JAR_PATH || exit 1
nohup java -jar $JAR_NAME > $LOG_FILE 2>&1 &
# 验证是否启动成功
sleep 2
NEW_PID=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
if [ -n "$NEW_PID" ]; then
echo "启动成功!进程ID: $NEW_PID"
echo "日志输出: $JAR_PATH/$LOG_FILE"
else
echo "启动失败,请检查日志"
exit 1
fi
}
# 主执行流程
echo "====== 开始更新部署 ======"
stop_old_process
start_new_process
echo "====== 更新完成 ======"
🚀 使用方法
1. 创建脚本文件
vim deploy.sh
# 粘贴上述脚本内容
2. 赋予执行权限
chmod +x deploy.sh
3. 执行部署
./deploy.sh
📤 输出示例
正常部署:
====== 开始更新部署 ======
正在停止进程 12345 …
进程已停止
正在启动新进程…
启动成功!进程ID: 12350
日志输出: /usr/local/project/java/system.log
====== 更新完成 ======
首次部署(无旧进程):
====== 开始更新部署 ======
未找到正在运行的进程
正在启动新进程…
启动成功!进程ID: 12350
日志输出: /usr/local/project/java/system.log
====== 更新完成 ======
⚠️ 注意事项




