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(无需变更)

相关推荐
三月不知肉味y11 分钟前
2026-07-05-JAVA面试场景题训练
java·开发语言·面试
姚不倒28 分钟前
F5 SSL Profile 证书卸载深入篇
运维·网络协议·负载均衡·ssl·f5
智商偏低37 分钟前
Windows Nginx 完整安装 + 启动教程
运维·nginx
豆瓣鸡38 分钟前
封装 API 请求日志切面——从注解定义到 Starter 自动装配
java·开发语言·spring boot
Zk.Sun1 小时前
Linux设置触屏双击距离容差
linux·运维·数据库
Let's Chat Coding1 小时前
对称密钥认证:主机和设备共享同一把密钥
运维·服务器·网络
掉鱼的猫1 小时前
把 OpenAPI 接入 Agent Harness:零代码让 Agent 听懂你的 REST API
java·llm·agent
bukeyiwanshui1 小时前
20260622 安装配置ubuntu
linux·运维·ubuntu
lzhcoder1 小时前
Spring Boot 集成 Kafka:先跑通 Demo,再避开那 80% 的人踩过的坑
java·kafka
写代码的学渣1 小时前
Linux 安装 Swap 交换分区大小标准(通用 + 生产服务器 + 个人 PC)
linux·运维·服务器