shell管理多个jar包脚本

本小妞迷上赌 提交于 2019-12-23 21:53:39

项目要求:

有多个jar要启动,启动参数也各不相同,根据配置文件来启动或不启动指定的jar包。

根据 https://blog.csdn.net/zk0920zk/article/details/79253950 里的脚本,

改良如下:

#! /bin/sh

# 系统模块
MODULES=(amap baidu superMap alarm gps lock tcpgw)
# 系统模块名称
MODULE_NAMES=(高德地图后台 百度地图后台 超图地图后台 告警 GPS数据存储 锁状态处理 网关)
# jar包数组
JARS=(admin-1.2-amap.jar admin-1.2-baidu.jar admin-1.2-superMap.jar alarm-1.2-SNAPSHOT.jar gps-1.2-SNAPSHOT.jar lock-monitor-1.2-SNAPSHOT.jar tcpgw-1.0.1.jar)
# 运行目录
PWD=$(cd $(dirname $0); pwd)
# jar包路径
JAR_PATH="$PWD/jar"
# 日志路径
LOG_PATH="$PWD/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
    skip=0
    MODULE=${MODULES[$i]}
    MODULE_NAME=${MODULE_NAMES[$i]}
    JAR_NAME=${JARS[$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
            printf "%12s\t%-24s\t已经运行\tPID=%d\n" $MODULE $MODULE_NAME $PID
        else
            case $MODULE in
                gps)
                    exec nohup java -Djava.library.path=/usr/local/taos/driver/ -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
                ;;
                tcpgw)
                    fileD=${PWD}/jar/config/application.yml
                    start_line=`grep "rabbitmq" $fileD -n| awk -F: '{print $1}'`
                    end_line=`grep "redis" $fileD -n| awk -F: '{print $1}'`
                    line=$[$end_line-$start_line]
                    TMP=`head -n $end_line $fileD | tail -n $line`
                    TMPa=`echo ${TMP#*host: }`
                    RMHost=`echo ${TMPa% username*}`
                    TMPa=`echo ${TMP#*username: }`
                    RMuser=`echo ${TMPa% password*}`
                    TMPa=`echo ${TMP#*password: }`
                    RMpasswd=`echo ${TMPa% redis*}`

                    exec nohup java -Dport=8602 -Damqp=amqp://${RMuser}:${RMpasswd}@${RMHost}:5672/ -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
                ;;
                *)
                    if [ "${MODULE}" == "amap" ]||[ "${MODULE}" == "baidu" ]||[ "${MODULE}" == "superMap" ];then
                        fileD=`cat ./jar/config/application.yml | grep type:`
                        TMP=`echo ${fileD// /}`
                        TMPa=`echo ${TMP#type:}`
                        skip=1
                        if [ "${MODULE}" == "baidu" ]&&[ "$TMPa" == "0" ];then
                            exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
                            skip=0
                        elif [ ${MODULE} == "superMap" ]&&[ "$TMPa" == "2" ];then
                            exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
                            skip=0
                        elif [ "${MODULE}" == "amap" ]&&[ "$TMPa" == "1" ];then
                            exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
                            skip=0
                        fi
                    else
                        exec nohup java -jar $JAR_PATH/$JAR_NAME > $LOG_PATH/$MODULE.log 2>&1 &
                    fi
            esac

                if ((skip == 0));then
                    sleep 3s
                    PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
                    while [ -z "$PID" ]
                    do
                        if (($count == 20));then
                            printf "%12s\t%24s\t%d秒内未启动,请检查!\n" $MODULE $MODULE_NAME $(expr $count \* 5)
                            break
                        fi
                        count=$(($count+1))
                        echo "$MODULE_NAME启动中.................."
                        echo "$PID..$JAR_NAME"
                        sleep 5s
                        PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
                    done
                    okCount=$(($okCount+1))
                    printf "%12s\t%-24s\t启动成功\tPID=%d\n" $MODULE $MODULE_NAME $PID
                fi
        fi
    fi
  done
  if(($commandOk == 0));then
    echo "第二个参数请输入:all|amap|baidu|superMap|alarm|gps|lock|tcpgw"
  else
    echo "............本次共启动:$okCount个服务..........."
  fi
}

status() {
  local MODULE=
  local MODULE_NAME=
  local JAR_NAME=
  for((i=0;i<${#MODULES[@]};i++))
  do
        MODULE=${MODULES[$i]}
        MODULE_NAME=${MODULE_NAMES[$i]}
        JAR_NAME=${JARS[$i]}
        PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
        if [ -n "$PID" ];then
                printf "%12s\t%-24s\t运行中...\tPID=%d\n" $MODULE $MODULE_NAME $PID
        else
                printf "%12s\t%-24s\t未运行\t\n" $MODULE $MODULE_NAME
        fi
  done
}


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
        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
        printf "%12s\t%-24s\t结束成功!\t\n" $MODULE $MODULE_NAME $PID
        okCount=$(($okCount+1))
      else
        printf "%12s\t%-24s\t未运行\t\n" $MODULE $MODULE_NAME
      fi
    fi
  done
  if (($commandOk == 0));then
    echo "第二个参数请输入:all|amap|baidu|superMap|alarm|gps|lock|tcpgw"
  else
    echo "............本次共停止:$okCount个服务............"
  fi
}


case "$1" in
  start)
    start "$2"
  ;;
  stop)
    stop "$2"
  ;;
  restart)
    stop "$2"
    sleep 3s
    start "$2"
  ;;
  status)
    status
  ;;
  *)
    echo "第一个参数请输入:start|stop|status|restart"
    exit 1
  ;;
esac

运行效果:

[root@9c0ecc4f0116 hg]# ./runjar.sh stop all
        amap    高德地图后台            结束成功!
       baidu    百度地图后台            未运行
    superMap    超图地图后台            未运行
       alarm    告警                    结束成功!
         gps    GPS数据存储             结束成功!
        lock    锁状态处理              结束成功!
       tcpgw    网关                    结束成功!
............本次共停止:5个服务............
[root@9c0ecc4f0116 hg]# ./runjar.sh start all
        amap    高德地图后台            启动成功        PID=37349
       alarm    告警                    启动成功        PID=37447
         gps    GPS数据存储             启动成功        PID=37523
        lock    锁状态处理              启动成功        PID=37667
       tcpgw    网关                    启动成功        PID=37786
............本次共启动:5个服务...........
[root@9c0ecc4f0116 hg]# ./runjar.sh status
        amap    高德地图后台            运行中...       PID=37349
       baidu    百度地图后台            未运行
    superMap    超图地图后台            未运行
       alarm    告警                    运行中...       PID=37447
         gps    GPS数据存储             运行中...       PID=37523
        lock    锁状态处理              运行中...       PID=37667
       tcpgw    网关                    运行中...       PID=37786
[root@9c0ecc4f0116 hg]# ./runjar.sh stop alarm
       alarm    告警                    结束成功!
............本次共停止:1个服务............
[root@9c0ecc4f0116 hg]# ./runjar.sh status
        amap    高德地图后台            运行中...       PID=37349
       baidu    百度地图后台            未运行
    superMap    超图地图后台            未运行
       alarm    告警                    未运行
         gps    GPS数据存储             运行中...       PID=37523
        lock    锁状态处理              运行中...       PID=37667
       tcpgw    网关                    运行中...       PID=37786
[root@9c0ecc4f0116 hg]# ./runjar.sh start alarm
       alarm    告警                    启动成功        PID=38480
............本次共启动:1个服务...........
[root@9c0ecc4f0116 hg]# ./runjar.sh status
        amap    高德地图后台            运行中...       PID=37349
       baidu    百度地图后台            未运行
    superMap    超图地图后台            未运行
       alarm    告警                    运行中...       PID=38480
         gps    GPS数据存储             运行中...       PID=37523
        lock    锁状态处理              运行中...       PID=37667
       tcpgw    网关                    运行中...       PID=37786

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!