linux一次启动多个jar包

linux一次启动多个jar包并且可以自定义路径和端口号

分享公司大神使用的一个脚步,可以一次启动多个jar包,也可以指定启动jar包

代码

复制代码
#! /bin/sh
# 端口号
PORTS=(8080 8081 8082 8083)
# 模块
MODULES=(gateway auth system file)
# 模块名称
MODULE_NAMES=(网关服务 认证服务 服务 文件服务)
VERSION=(1.6.4 1.3.5 1.3.7 1.3.9)  
# jar包数组
# JARS=(test-big-data-service-1.0.1-SNAPSHOT.jar test-content-service-1.0.1-SNAPSHOT.jar)
# jar包路径
JAR_PATH='/opt/usr'
# java 环境变量
JVM_OPTS="-Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8"
JVM_OPTS="${JVM_OPTS} -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -XX:+UseParallelOldGC"
# 启动加载配置文件
PROFILES_ACTIVE=dev
 
start(){
  local MODULE;
  local MODULE_NAME;
  local JAR_NAME;
  local command="$1";
  local commandOk=0;
  local count=0;
  local okCount=0;
  local port=0;
  for((i=0;i<${#MODULES[@]};i++));
  do
    MODULE=${MODULES[$i]}
    MODULE_NAME=${MODULE_NAMES[$i]}
    JAR_NAME=${MODULES[$i]}-${VERSION[$i]}.jar
    echo ${JAR_NAME}
    PORT=${PORTS[$i]}
    if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
      commandOk=1
      count=1
      PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
      if [ -n "$PID" ];then
        echo "$MODULE----$MODULE_NAME:已经运行,PID=$PID"
      else
        echo "java ${JVM_OPTS} -jar $JAR_PATH/$JAR_NAME --spring.profiles.active=$PROFILES_ACTIVE > $JAR_PATH/logs/$MODULE.log 2>&1 &"
        exec java ${JVM_OPTS} -jar $JAR_PATH/$JAR_NAME --spring.profiles.active=$PROFILES_ACTIVE > $JAR_PATH/logs/$MODULE.log 2>&1 &
        echo "$MODULE_NAME启动中..."
        sleep 10s
        PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        while [ -z "$PID" ]
        do
          if (($count == 3));then
            echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
            break
          fi
          count=$(($count+1))
          echo "$MODULE_NAME启动中.................."
          sleep 10s
          PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        if [ -n "$PID" ];then
          okCount=$(($okCount+1))
          echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
        else
          echo "$MODULE---$MODULE_NAME:启动失败,请检查"
        fi
      fi
    fi
  done
  if(($commandOk == 0));then
    echo "第二个参数请输入以下的某个值:"
    echo "--> all"
    for((i=0;i<${#MODULES[@]};i++));
    do
      echo "--> "${MODULES[$i]}
    done
  else
    echo "............启动成功!本次共启动:$okCount个服务..........."
  fi
}
 
stop(){
  local MODULE;
  local MODULE_NAME;
  local JAR_NAME;
  local command="$1";
  local commandOk=0;
  local okCount=0;
  for((i=0;i<${#MODULES[@]};i++));
  do
    MODULE=${MODULES[$i]}
    MODULE_NAME=${MODULE_NAMES[$i]}
    JAR_NAME=${MODULES[$i]}-${VERSION[$i]}.jar
    if [ "$command" = "all" ] || [ "$command" = "$MODULE" ];then
      commandOk=1
      PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
      if [ -n "$PID" ];then
        echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
        kill -9 $PID
        PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        while [ -n "$PID" ]
        do
          sleep 3s
          PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        done
        echo "$MODULE---$MODULE_NAME:成功结束"
        okCount=$(($okCount+1))
      else
        echo "$MODULE---$MODULE_NAME:未运行"
      fi
    fi
  done
  if (($commandOk == 0));then
    echo "第二个参数请输入以下的某个值:"
    echo "--> all"
    for((i=0;i<${#MODULES[@]};i++));
    do
      echo "--> "${MODULES[$i]}
    done
  else
    echo "............停止成功!本次共停止:$okCount个服务............"
  fi
}
 
case "$1" in
  start)
    start "$2"
  ;;
  stop)
    stop "$2"
  ;;
  restart)
    stop "$2"
    sleep 3s
    start "$2"
  ;;
  *)
    echo "第一个参数请输入:start|stop|restart"
    exit 1
  ;;
esac
exit 0

使用

1.编辑脚步,复制代码到文本,改名为start_jar.sh

2.启动命令

复制代码
start_jar.sh start all

第三个all的参数也可以是单独一个jar包名

3.停止命令

复制代码
start_jar.sh stop all

第三个all的参数也可以是单独一个jar包名

相关推荐
ltl17 小时前
大多数「无锁」代码其实不是无锁的
linux
ltl17 小时前
Linux 内核的内存屏障:一个让我调了三天的 bug
linux
Lonely 净土19 小时前
Rocky Linux 安装教程
linux·运维·服务器
李白你好1 天前
Windows 离线 Linux 提权辅助查询工具
linux
Lust Dusk1 天前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu1 天前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
千千寰宇1 天前
[Linux/Ollama] Termux : 一款运行在 Android 平台上的开源终端模拟器与 Linux 环境应用、支持在手机上基于Ollama部署LLM
linux
lingran__1 天前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
Dlrb12111 天前
Linux驱动---sys文件系统自动添加设备节点、添加调试节点以及MISC设备驱动的解释
linux·imx6ull·misc·设备节点·sys文件系统
刘某的Cloud1 天前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用