Linux部署多个jar包脚本

前言:

系统有多个jar包需要更新部署,如果每次都要手动敲java -jar的话,并且还要指定生成环境还是测试环境,这样就显得很麻烦,为此提供一个脚本如下,可根据自己的需求自定义该脚本:

srmBackApplication.sh

powershell 复制代码
#! /bin/sh
# 端口号
PORTS=(8081 11113 19021 11119 18011 19013 19008 18888 11114 11116 11110 19012 21114 18021)
# 模块
MODULES=(isrm-gateway isrm-system isrm-attachment isrm-auth isrm-basic isrm-bid isrm-notice isrm-job isrm-per isrm-pur isrm-report isrm-sup isrm-workflow isrm-contract)
# 模块名称
MODULE_NAMES=(网关 系统服务  文件管理  授权管理 基础服务 采购池管理 消息中心 任务调度 供应商评价 采购执行 报表管理 供应商管理 工作流 合同管理)
# jar包数组
JARS=(isrm-gateway.jar isrm-system.jar isrm-attachment.jar isrm-auth.jar isrm-basic.jar isrm-bid.jar isrm-notice.jar isrm-job.jar isrm-per.jar isrm-pur.jar isrm-report.jar isrm-sup.jar isrm-workflow.jar isrm-contract.jar)
# 服务运行内存
XMX=(256m 256m 256m 256m 256m 512m 256m 256m 512m 512m 512m 256m 256m 512m)
# jar包路径
JAR_PATH='/srm/application/back'
# 日志路径
LOG_PATH='/srm/application/back/logs'
start() {
  local MODULE=
  local MODULE_NAME=
  local JAR_NAME=
  local command="$1"
  local commandLog="$2"
  local commandOk=0
  local commandLogOk=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=${JARS[$i]}
    PORT=${PORTS[$i]}
	XMX=${XMX[$i]}
	
    if [ "$command" == "all" ] || [ "$command" == "$MODULE" ];then
      commandOk=1
      count=0
      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
		if [ -n "$commandLog" ];then
		  if [ "$commandLog" == "log" ];then
			commandLogOk=1
			exec nohup java -Xms128m -Xmx$XMX -jar $JAR_PATH/$JAR_NAME  --spring.profiles.active=prod >> $LOG_PATH/$MODULE.log 2>&1 &
		  else
		    break
		  fi
		else
		   exec nohup java -Xms128m -Xmx$XMX -jar $JAR_PATH/$JAR_NAME  --spring.profiles.active=prod >> /dev/null 2>&1 &
		fi
	    PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
	    while [ -z "$PID" ]
	    do
		  if (($count == 30));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
	    okCount=$(($okCount+1))
	    echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
      fi
    fi
  done
  if(($commandOk == 0));then
    echo "第二个参数输入错误"
  elif [ -n "$commandLog" ] && (($commandLogOk == 0));then
	echo "第三个参数输入错误"
  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=${JARS[$i]}
    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 "第二个参数输入错误"
  else
    echo "............本次共停止:$okCount个服务............"
  fi
}
 
 
case "$1" in
  start)
    start "$2" "$3"
  ;;
  stop)
    stop "$2"
  ;;
  restart)
    stop "$2"
    sleep 3s
    start "$2" "$3"
  ;;
  *)
    echo "第一个参数请输入:start|stop|restart"
    exit 1
  ;;
esac

常用命令:

powershell 复制代码
重启全部:sh srmBackApplication.sh restart all
重启单个:sh srmBackApplication.sh restart isrm-system(单个服务名)
停止全部:sh srmBackApplication.sh stop all
停止单个:sh srmBackApplication.sh stop isrm-system(单个服务名)
启动全部:sh srmBackApplication.sh start all
启动单个:sh srmBackApplication.sh start isrm-system(单个服务名)
相关推荐
望获linux1 分钟前
【实时Linux实战系列】实时系统的可观测性:Prometheus 与 Grafana 集成
大数据·linux·服务器·开发语言·网络·操作系统
捷智算云服务2 分钟前
H200服务器维修服务体系构建:捷智算的全链条保障方案
运维·服务器
hweiyu002 分钟前
Linux 命令:mount
linux·运维·服务器
zhmy_0062 分钟前
linux 多服务器下目录数据文件实时同步
linux·文件实时同步
AI视觉网奇15 分钟前
redis 配置学习笔记
linux·服务器
红尘客栈243 分钟前
K8S基本命令操作
linux·容器·kubernetes
阑梦清川1 小时前
linux网络基础
linux
春生野草2 小时前
MobaXterm远程连接云服务器及配置jdk、Tomcat环境
运维·服务器
月墨江山3 小时前
Ubuntu 20.04 使用 Issac Gym 进行宇树G1人形机器人进行强化学习训练(Linux仿真)
linux·ubuntu·机器人
养生技术人3 小时前
Oracle OCP认证考试题目详解082系列第49题
运维·数据库·sql·oracle·database·开闭原则·ocp