SH命令自动启停jar
1.脚本内容
#!/bin/bash
# 定义 Jar 包路径和日志路径(便于后续维护,修改这里即可)
JAR_PATH="/xxx/xxx.jar"
LOG_PATH="/xxx/xxx.log"
# 第一步:杀掉 Jar 包对应的进程
echo "===== 开始停止 jar 进程 ====="
# 1. 通过 Jar 包路径查找进程 ID(PID),排除 grep 自身进程
PID=$(ps -ef | grep "${JAR_PATH}" | grep -v grep | awk '{print $2}')
# 2. 判断是否找到进程,有则杀进程,无则提示
if [ -n "${PID}" ]; then
echo "找到进程 ID:${PID},正在停止..."
# 先尝试优雅停止(15秒超时),超时后强制杀死
kill -15 "${PID}"
sleep 2
# 检查进程是否还存在,存在则强制杀死
if ps -p "${PID}" > /dev/null; then
echo "优雅停止失败,强制杀死进程 ${PID}..."
kill -9 "${PID}"
fi
echo "进程 ${PID} 已停止"
else
echo "未找到 admin-1.0-SNAPSHOT-execute.jar 运行的进程"
fi
# 第二步:后台启动 Jar 包
echo -e "\n===== 开始启动 jar ====="
# 先清空旧日志(可选,若需要保留旧日志则注释这行)
> "${LOG_PATH}"
# 后台启动 Jar 包,输出重定向到日志文件
nohup java -jar "${JAR_PATH}" > "${LOG_PATH}" 2>&1 &
# 验证启动是否成功
sleep 3
NEW_PID=$(ps -ef | grep "${JAR_PATH}" | grep -v grep | awk '{print $2}')
if [ -n "${NEW_PID}" ]; then
echo "Jar 包启动成功,新进程 ID:${NEW_PID}"
echo "日志文件路径:${LOG_PATH}"
else
echo "Jar 包启动失败,请检查日志文件:${LOG_PATH}"
fi
echo -e "\n===== 操作完成 ====="赞(1)
赏