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

相关推荐
骇客野人12 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
草邦设计开发团队_媒体资源平台12 小时前
GEO 信源整合一键发布软文:从内容生产到流量获客的自动化实践
运维·人工智能·自动化
zhou lily13 小时前
非标自动化管理系统ERP如何选?2026年10大ERP软件对比分析
运维·自动化
qiuhaipeng113 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
mengge.cloud13 小时前
存储技术基础小白教程
linux·运维·服务器·wpf·存储
云贝贝贝13 小时前
腾讯云 TDSQL(MySQL 版)运维高频 6 坑:代理路由、读写分离、分片键、监控、PITR
运维·mysql·腾讯云
wxwx_bscxy32213 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
小五传输13 小时前
FTP替代怎么做?医院文件安全传输选型与迁移指南
大数据·运维·安全
金智维科技官方13 小时前
财务核算如何提效?这三条核心链路正在加速自动化
运维·人工智能·ai·自动化·财务·智能体
evans在进步14 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio