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

相关推荐
剑神一笑9 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
剑神一笑9 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
日取其半万世不竭14 小时前
iftop、nethogs 和 nload:Linux 服务器网络流量实时监控工具介绍
linux·运维·服务器
mounter62514 小时前
Linux 内核资源管理:控制组(cgroup)的演进与“策略组”新提案
linux·运维·服务器·cgroup·kernel
bksczm14 小时前
文件在磁盘中的存储方式
linux·运维·服务器
L16247614 小时前
OpenSSH 半自动升级方案(独立编译 + 手动迁移 + 重建 systemd 服务)
linux·服务器·ssh
半旧夜夏14 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
爱莉希雅&&&15 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
z2005093015 小时前
【linux学习】深入理解linux文件I/O,从C标准库到内核态
linux·学习·操作系统
weixin_3077791316 小时前
面向高性能保密计算的定制 Linux 系统构建与自动部署方案
linux·安全·网络安全·性能优化·系统安全