Java启动和停止jar文件sh脚本:自适应文件名方式启停 + 写死环境 启动;自适应文件名方式 + 命令行传参切换环境 启动

Java启动和停止jar文件sh脚本:自适应文件名方式启停 + 写死环境 启动;自适应文件名方式 + 命令行传参切换环境 启动

Java启动和停止jar文件sh脚本

APP_PREFIX 需要替换为你的 jar 名称前缀

自适应文件名方式启停 + 写死环境 启动:APP_PROFILE 需要替换为对应的环境参数,来适配项目中的多个配置文件

1. 自适应文件名方式启停 + 写死环境 启动

特性说明

  • 支持版本号变化(如 aaa-2024-05.RELEASE.jar)。
  • 启动自动查找 jar,不需手动修改文件名。

启动脚本:start.sh

启动脚本:直接使用 nohup 启动,不需要指定日志路径,因为你的应用本身已输出日志(例如 logback/log4j)。

bash 复制代码
#!/bin/bash

APP_PREFIX="aaa"
APP_PROFILE="test"

# 自动匹配 jar 文件
JAR_NAME=$(ls ${APP_PREFIX}*.jar 2>/dev/null | head -n 1)

if [ -z "$JAR_NAME" ]; then
  echo "未找到匹配的 jar 文件(${APP_PREFIX}*.jar)"
  exit 1
fi

# 检查是否已在运行
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
  echo "服务已在运行,PID: $PID"
  exit 0
fi

# 启动服务
echo "启动服务:$JAR_NAME,Profile: $APP_PROFILE"
nohup java -jar "$JAR_NAME" --spring.profiles.active="$APP_PROFILE" >/dev/null 2>&1 &

sleep 1
NEW_PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$NEW_PID" ]; then
  echo "服务启动成功,PID: $NEW_PID"
else
  echo "服务启动失败,请检查日志或配置"
fi

停止脚本:stop.sh

停止脚本:通过 ps -ef | grep hotline-data-middleware 获取 PID

bash 复制代码
#!/bin/bash

APP_PREFIX="aaa"

# 获取匹配 jar 名称(任意版本)
JAR_NAME=$(ls ${APP_PREFIX}*.jar 2>/dev/null | head -n 1)
if [ -z "$JAR_NAME" ]; then
  echo "未找到匹配的 jar 文件(${APP_PREFIX}*.jar)"
  exit 1
fi

# 查找 PID
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
  echo "服务未在运行:$JAR_NAME"
  exit 0
fi

echo "停止服务,PID: $PID"
kill $PID

sleep 2
if ps -p $PID > /dev/null 2>&1; then
  echo "进程仍在运行,尝试强制终止..."
  kill -9 $PID
fi

echo "服务已停止"

2. 自适应文件名方式 + 命令行传参切换环境 启动

特性说明

  • 默认环境为 test
  • 支持运行时传参,例如:./start.sh prod./start.sh devsh start.sh prod
  • 如果未传参数,则默认使用 test

启动脚本:start.sh

bash 复制代码
#!/bin/bash

APP_PREFIX="aaa"
APP_PROFILE=${1:-test}  # 默认环境为 test,支持传参

# 自动匹配 jar 文件
JAR_NAME=$(ls ${APP_PREFIX}*.jar 2>/dev/null | head -n 1)

if [ -z "$JAR_NAME" ]; then
  echo "未找到匹配的 jar 文件(${APP_PREFIX}*.jar)"
  exit 1
fi

# 检查是否已在运行
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
  echo "服务已在运行,PID: $PID"
  exit 0
fi

echo "启动服务:$JAR_NAME,Profile: $APP_PROFILE"
nohup java -jar "$JAR_NAME" --spring.profiles.active="$APP_PROFILE" >/dev/null 2>&1 &

sleep 1
NEW_PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{print $2}')
if [ -n "$NEW_PID" ]; then
  echo "服务启动成功,PID: $NEW_PID"
else
  echo "服务启动失败,请检查日志或配置"
fi

停止脚本:stop.sh(无需变更)

相关推荐
A_humble_scholar6 分钟前
Linux(九) 进程管理完全指南:从入门到实战
linux·运维·chrome
江华森14 分钟前
Linux 操作命令完全指南
linux·运维
云烟成雨TD16 分钟前
Spring AI 1.x 系列【61】Spring AI 2.0 升级指南
java·人工智能·spring
源图客1 小时前
【AI向量数据库】Weaviate介绍与部署
运维·docker·容器
用什么都重名1 小时前
Git分支合并与远程服务器同步实战:保留关键配置文件
运维·服务器·git
C++ 老炮儿的技术栈1 小时前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
2301_780789661 小时前
零信任架构中,身份感知防火墙(IAFW)的部署要点与最佳实践
linux·运维·服务器·人工智能·tcp/ip·架构
lulu12165440781 小时前
OpenRouter Fusion 多模型融合架构深度拆解:预算级模型组团打平 Fable 5,多模型协作才是 AGI 的正确打开方式?
java·人工智能·架构·ai编程·agi
雨辰AI1 小时前
生产级实测:SpringBoot3 + 达梦数据库接口从 200ms 优化至 20ms 完整调优指南
java·数据库·spring boot·后端·政务