Linux下批量启动jar包的shell脚本

Posted zengnansheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下批量启动jar包的shell脚本相关的知识,希望对你有一定的参考价值。

jar_shell.sh文件内容如下

#! /bin/sh
# 端口号
PORTS=(8761 10000)
# 模块
MODULES=(zns-eureka zns-product)
# 模块名称
MODULE_NAMES=(注册中心 产品模块)
# jar包数组
JARS=(zns-eureka-1.0.0.jar zns-product-1.0.0.jar)
# jar包路径
JAR_PATH=‘/usr/local/app/jars‘
# 日志路径
LOG_PATH=‘/usr/local/app/logs‘
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=$JARS[$i]
    PORT=$PORTS[$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
        exec nohup java -Xms256m -Xmx512m -jar $JAR_PATH/$JAR_NAME >> $LOG_PATH/$MODULE.log 2>&1 &
        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 "第二个参数输入错误"
  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"
  ;;
  stop)
    stop "$2"
  ;;
  restart)
    stop "$2"
    sleep 3s
    start "$2"
  ;;
  *)
    echo "第一个参数请输入:start|stop|restart"
    exit 1
  ;;
esac

启动所有jar包:sh jar_shell.sh start all 或者./sh start all

停止所有jar包:sh jar_shell.sh stop all 或者./sh stop all

重启所有jar包:sh jar_shell.sh restart all 或者./sh restart all

启动,停止或重启单个jar包,只需要将all替换为相应的模块就行

比如 sh jar_shell.sh start zns-eureka

以上是关于Linux下批量启动jar包的shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用 linux shell脚本启动jar包,进行关闭,查看状态

Linux shell脚本启动 停止 重启jar包

java项目打成jar包并部署到Linux服务器,以及在shell脚本中启动java程序

mac下如何用脚本启动jar包程序

shell脚本批量启动jar

linux shell调用java的jar包怎么写?