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

相关推荐
青梅橘子皮8 小时前
Linux---基本指令
linux·运维·服务器
REDcker8 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
cui_ruicheng9 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
蚰蜒螟9 小时前
深入 Linux 内核同步机制:从 futex 到 spinlock 的完整旅程
linux·windows·microsoft
运维全栈笔记9 小时前
Linux安装配置Tomcat保姆级教程:从部署到性能调优
linux·服务器·中间件·tomcat·apache·web
dllmayday11 小时前
Linux 上用终端连接 WiFi
linux·服务器·windows
峥无12 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
用户23678298016812 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux
Strugglingler12 小时前
【systemctl 学习总结】
linux·systemd·systemctl·journalctl·unit file
嵌入式×边缘AI:打怪升级日志14 小时前
100ASK-T113 Pro 开发板 Bootloader 完全开发指南
linux·ubuntu·bootloader