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

相关推荐
望获linux1 小时前
【Linux基础知识系列】第四十三篇 - 基础正则表达式与 grep/sed
linux·运维·服务器·开发语言·前端·操作系统·嵌入式软件
眠りたいです1 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
我的泪换不回玫瑰1 小时前
Linux系统管理命令
linux
jjkkzzzz2 小时前
Linux下的C/C++开发之操作Zookeeper
linux·zookeeper·c/c++
二当家的素材网2 小时前
Centos和麒麟系统如何每天晚上2点10分定时备份达梦数据库
linux·数据库·centos
挑战者6668882 小时前
CentOS 系统高效部署 Dify 全攻略
linux·运维·centos
DD_陈东东2 小时前
gdbus 常用数据结构与库函数
linux
DIY机器人工房3 小时前
代码详细注释:ARM-Linux字符设备驱动开发案例:LCD汉字输出改进建议开发板断电重启还能显示汉字,显示汉字位置自定义
linux·嵌入式·文件io·diy机器人工房
得物技术4 小时前
eBPF 助力 NAS 分钟级别 Pod 实例溯源|得物技术
linux
Rudon滨海渔村4 小时前
解决阿里云ubuntu内存溢出导致vps死机无法访问 - 永久性增加ubuntu的swap空间 - 阿里云Linux实例内存溢出(OOM)问题修复方案
linux·运维·ubuntu