用于管理 SpringBoot 应用的 shell 脚本,可自动识别当前目录下前缀为 “xxx” 的版本号最大的 jar 包,并提供启动、停止、重启、查看状态及日志的功能。 下载run.sh

#!/bin/sh

# 应用基础名称,用于匹配相关jar包
APP_PREFIX="vlog-server"
# 启动参数,指定生产环境配置
EXEC_ARGS="--spring.profiles.active=prod"

# 查找当前目录下版本号最大的jar包
# 逻辑说明:
# 1. 列出所有以APP_PREFIX开头的jar包(格式如vlog-server-x.y.z.jar)
# 2. 使用sort -V按版本号规则排序(支持x.y.z格式)
# 3. 取排序后的最后一个(版本号最大)
JAR_FILE=$(ls -1 "${APP_PREFIX}"-*.jar 2>/dev/null | sort -V | tail -n 1)

# 显示脚本使用帮助信息
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status|log]"
    exit 1
}

# 检查应用是否正在运行
# 返回值:
# 0 - 应用正在运行(pid变量会被赋值)
# 1 - 应用未运行
is_exist(){
  # 通过jar包名查找进程(排除grep自身进程),获取进程ID
  pid=$(ps -ef | grep "${JAR_FILE}" | grep -v grep | awk '{print $2}')
  
  # 判断pid是否为空,为空则未运行
  if [ -z "${pid}" ]; then
    return 1
  else
    return 0
  fi
}

# 启动应用
start(){
  # 先检查应用是否已运行
  is_exist
  if [ $? -eq "0" ]; then
    echo "${JAR_FILE} is already running. pid=${pid} ."
  else
    # 检查是否找到可用的jar包
    if [ -z "${JAR_FILE}" ]; then
      echo "Error: No ${APP_PREFIX}-*.jar file found in current directory!"
      exit 1
    fi
    
    # 后台启动应用,输出重定向到/dev/null(不生成nohup.out)
    nohup java -jar "${JAR_FILE}" ${EXEC_ARGS} >/dev/null 2>&1 &
    echo "${JAR_FILE} starting..."
  fi
}

# 停止应用
stop(){
  # 检查应用是否在运行
  is_exist
  if [ $? -eq "0" ]; then
    # 发送终止信号(15是SIGTERM,优雅终止)
    kill -15 "${pid}"
    echo "${JAR_FILE} stopping..."
    
    # 等待1秒后检查是否已停止
    sleep 1
    is_exist
    if [ $? -eq "0" ]; then
      # 如果仍在运行,循环等待直到停止
      while [ $? -eq "0" ]
      do
        sleep 1
        is_exist
      done
    fi
    echo "${JAR_FILE} is stopped OK"
  else
    echo "${JAR_FILE} is not running"
  fi
}

# 查看应用运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${JAR_FILE} is running. Pid is ${pid}"
  else
    echo "${JAR_FILE} is NOT running."
  fi
}

# 查看应用日志(跟踪当前目录下所有日志文件)
log(){
  tail -f *.log
}

# 重启应用(先停止再启动)
restart(){
  stop
  start
}

# 根据输入参数执行对应命令
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  "log")
    log
    ;;
  *)
    usage
    ;;
esac

文章作者: Z
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微博客
运维 基础
喜欢就支持一下吧