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包名

相关推荐
2301_780943846 分钟前
linux 对文件打补丁(Patch)
linux·运维·服务器
敬往事一杯酒哈17 分钟前
Ubuntu 20.04 安装Anacada
linux·运维·ubuntu
Lam㊣19 分钟前
服务器端口转发的方法
linux·服务器
zxnbmk20 分钟前
【7】Kubernetes存储(本章知识密度较高,仅浅浅了解后续详解)
linux·云原生·容器·kubernetes
ChangYan.20 分钟前
Windows命令行(cmd)下快速查找文件路径(类似Linux下find命令)
linux·运维·服务器
Hey小孩36 分钟前
[个人总结] LDD3:3.字符驱动 - scull(4)
linux·驱动开发
陈让然36 分钟前
VS Code新版本无法连接WSL ubuntu18.04
linux·运维·ubuntu
oMcLin39 分钟前
如何在Oracle Linux 8.4上通过配置Oracle RAC集群,确保企业级数据库的高可用性与负载均衡?
linux·数据库·oracle
小杰帅气41 分钟前
神秘的环境变量和进程地址空间
linux·运维·服务器
Vect__41 分钟前
基于CSAPP对链接和库的理解
linux