shell脚本如何启动springboot项目,


目录
  • shell脚本启动springboot项目
    • Spring Boot项目启动
  • springboot项目linux简单的启动、停止、更新脚本sh
    • 1.启动脚本
    • 2.停止脚本
    • 3.版本升级脚本
    • 4、回滚脚本
    • 5.远程发布脚本(前提配置免密登录)
  • 总结

    shell脚本启动springboot项目

    Spring Boot项目启动

    我们知道打包好的Spring Boot项目这样启动

    java -jar -Dfile.encoding=utf-8 test-0.0.1-SNAPSHOT.jar

    在linux中,常常使用nohup后台启动其他程序,Spring Boot项目使用nohup启动如下

    nohup java -jar -Dfile.encoding=utf-8 test-0.0.1-SNAPSHOT.jar &

    如果使用上面命令启动,注意这时候远程terminal要主动exit退出,不这样做系统可能会杀掉上面启动的进程

    由于开发需要,需要频繁地更新项目,写了两个shell脚本启动和关闭项目

    • 启动项目脚本 start.sh
    #!/bin/bash
    cd project  # ccd2002-0.0.1-SNAPSHOT.jar所在目录
    nohup java -Xms128m -Xmx256m -jar -Dfile.encoding=utf-8 ccd2002-0.0.1-SNAPSHOT.jar &
    • 关闭项目脚本
    #!/bin/bash
    sudo kill $(ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}')

    上面脚本使用ps命令查到ccd2002项目的信息,然后使用awk过滤信息获取项目pid,最后使用kill杀掉项目。

    为了方便大家理解,下面分解

    sudo kill $(ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}')
    ps -aux | grep 'ccd2002'

    命令执行结果截图如下

    ps -aux | grep 'test' | awk 'NR==2{print $2}'

    命令取出上图中指出的pid

    awk命令对ps结果进行处理,awk 'NR==2{print $2}'中的NR=2表示ps结果的第二行,$2表示行中的第二个元素

    springboot项目linux简单的启动、停止、更新脚本sh

    1.启动脚本

    #!/bin/bash
    #获取路径
    basepath=$(cd $(dirname $0); pwd)
    echo  "xxxxxx  启动开始............."
    nohup java -jar  $basepath/xxxxxx.jar  --spring.profiles.active=prd >/dev/null 2>&1&
    echo  "xxxxxx  启动成功............."

    2.停止脚本

    #!/bin/bash
    echo "xxxxxx    停止开始......."
    ID=`ps -ef | grep "xxxxxx.jar" | grep -v "grep" | awk '{print $2}'`
    echo $ID
    for id in $ID
    do
    kill -9 $id
    echo "killed $id"
    done
    sleep 5s
    echo "xxxxxx    停止成功......."

    3.版本升级脚本

    #!/bin/bash
    basepath=$(cd $(dirname $0); pwd)
    echo "############################执行update.sh开始###########################"
    echo "基础路径:$basepath"
    echo "远程传递参数为:" ${1}
    if [ -z ${1} ];then 
    echo "工程名称参数传递为空,更新失败"
    else
    if [ -f "$basepath/../../deploy/${1}.jar" ];then
            echo "开始备份工程包"
            cp $basepath/${1}.jar  $basepath/../appBak/${1}.jar_$(date '+%Y-%m-%d-%H:%M:%S')
            echo "工程包备份成功"
            #停止应用    
            sh $basepath/stop.sh
            #开始删除老的工程包
            if [ -f "$basepath/${1}.jar" ];then
            rm $basepath/${1}.jar
            fi
            echo "开始更新工程包"
         mv $basepath/../../deploy/${1}.jar $basepath/${1}.jar
           if [ $? -eq 0 ];then
            #启动应用
            sh $basepath/start.sh
            else
              echo "工程包移动失败"
            fi
    else
     echo "升级包不存在"
    fi
    fi
    echo "############################执行update.sh结束###########################"

    4、回滚脚本

    #!/bin/bash
    basepath=$(cd $(dirname $0); pwd)
    echo "基础路径:$basepath"
    packageName=$(cd ${basepath}'/../appBak'; ls -lrlt |grep $(date '+%Y-%m-%d') |head -n 1 |awk '{print $9}' )
    echo "获取回滚包名称为:"$packageName
    if [ -z $packageName ];then
       echo "回滚 "$1" 包不存在,回滚失败"
    else
    echo "远程传递参数为:"${1}
    if [ -z ${1} ];then
    echo "工程名称参数为空,回滚失败"
    else
    #将备份包还原在启动
    cp $basepath/../appBak/$packageName $basepath/../../deploy/${1}.jar
    if [ -f "$basepath/../../deploy/"${1}".jar" ];then
            #停止应用    
            sh $basepath/stop.sh
            if [ -f "$basepath/"${1}".jar" ];then
            #开始删除老的工程包
            rm $basepath/${1}.jar
            fi
            mv $basepath/../../deploy/${1}.jar $basepath/${1}.jar
            if [ $? -eq 0 ];then
             echo "回滚还原包成功"
            #启动应用
            sh $basepath/start.sh
            else
              echo  "工程包还原失败"
            fi
    else
     echo "还原包不存在"
    fi
    fi
    fi

    5.远程发布脚本(前提配置免密登录)

    #!/bin/bash
    echo "******************************远程发布脚本***********************************************************"
    echo " "
    echo "********脚本参数 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-ext、********"
    echo "********ddp-server-task、dmsp-gateway 脚本类型:支持 update(更新脚本)/rollbak(回滚脚本)***************"
    echo "*******将上述工程名对应的jar包放在 /opt/apps/deploy目录下********************************************"
    echo "********在config.properties配置文件中,配置工程对应的服务器IP多台机器则以逗号(,)分隔。***************"
    echo "********如 ddp-server=192.168.1.2,192.178.3.4 的形式配置工程对应的机器*******************************"
    echo "*************执行脚本的方式如  sh deploy.sh ddp-server update  升级**********************************"
    echo "*************执行脚本的方式如  sh deploy.sh ddp-server rollbak 回滚**********************************"
    echo "  "
    echo "******************************远程发布脚本***********************************************************"
    echo "     "
    echo "##############################开始校检参数############################################################"
    if [ -z $1 ]||[ -z $2 ];then
    echo " "
    echo '参数不能为空,如: sh deploy.sh ddp-server update'
    echo ""
    echo "##############################参数校检失败############################################################"
    else
    echo " "
    echo "##############################参数校检成功############################################################"
    echo "    "
    echo "#############################开始校检配置文件#########################################################"
    echo "  "
    path="/opt/apps/deploy"
    echo "远程发布包的路径为:" $path
    shellpath=""
    if [ $1 == "ddp-server" ];then
     shellpath="/opt/apps/ddp/app"
    elif [ $1 == "ddp-server-idxs" ];then
     shellpath="/opt/apps/ddp-idxs/app"
    elif [ $1 == "ddp-server-mdxs" ]; then
     shellpath="/opt/apps/ddp-mdxs/app"
    elif [ $1 == "ddp-server-ext" ]; then
      shellpath="/opt/apps/ddp-ext/app"
    elif [ $1 == "ddp-server-task" ];then
      shellpath="/opt/apps/ddp-task/app"
    elif [ $1 == "dmsp-gateway" ];then
      shellpath="/opt/apps/dmsp-gateway/app"
    fi 
    echo "远程脚本路径为:"$shellpath
    #工程模块名称
    modle=$(cat config.properties |grep  $1"=" |awk -F '=' '{print $1}')
    echo "工程名称为:"$modle
    ips=$(cat config.properties |grep  $1"="|awk -F '=' '{print $2}')
    echo 目标ip为:$ips
    echo " "
    if [ -z $modle ];then
    echo "###########工程在配置文件(config.properties)中不存在,脚本执行终止#####################################"
    elif [ -z $ips ]; then
    echo "#############工程对应的目标机器ip在配置文件(config.properties)中不存在,脚本执行终止##################"
    elif [ -z $shellpath ];then
    echo "############################"$1"不支持远程操作,脚本执行终止##########################################"
    elif [ $2 != 'update' ] && [ $2 != 'rollbak' ];then
    echo "############################远程操作仅支持 update 或 rollbak,脚本执行终止############################"
    else
    echo "###################配置文件校检通过,开始更新或回滚操作###############################################"
    OLD_IFS="$IFS"
    IFS=","
    #如下会自动分隔
    arr=($ips)
    #恢复原来的分隔符
    IFS="$OLD_IFS"
    #遍历数组
    for ip in ${arr[@]}
    do
     if [ $2 == 'update' ];then
      echo "     "
      echo "====================================================================================================="
      echo "++++++++++++++++++++++++++++++++++++"${ip}"开始执行更新操作++++++++++++++++++++++++++++++++"
      echo "     "
      echo "开始远程拷贝文件" ${modle}".jar 到机器ip为: "${ip} ${path}"的目录下"
       scp  -o ConnectTimeout=10 ${path}/${modle}.jar phfund@${ip}:${path}
      if [ $? -ne 0 ];then
          echo "远程拷贝"${modle}".jar 到 " ${ip} " 失败,本次更新失败"
          echo "  "
         echo "======================================================================================================"
      else
         echo "远程拷贝"  ${modle}".jar到" $ip "成功"
          ssh  -o ConnectTimeout=10  ${ip}   ' sh ' $shellpath'/'$2'.sh ' $1 
          if [ $? -eq 0 ];then
          echo "     "
          echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"更新成功+++++++++++++++++++++++++++"
          echo "================================================================================================="
          else
           echo "     "
           echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"更新失败++++++++++++++++++++++++++"   
           echo "================================================================================================"
          fi
       fi
    elif [ $2=='rollbak' ];then
          echo "     "
         echo "==================================================================================================="   
         echo "+++++++++++++++++++++++++++++++++++++++++++++++++++"${ip}"开始执行回滚操作++++++++++++++"
         echo "     "
         ssh  -o ConnectTimeout=10 ${ip}   ' sh '${shellpath}'/'$2'.sh ' $1 
          if [ $? -ne 0 ];then
            echo "     "
            echo "+++++++++++++++++++++++++++++++++++++++++++++++"${ip}"回滚操作失败++++++++++++++++++++"    
             echo "===============================================================================================" 
         else
            echo "     "
            echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"回滚操作成功++++++++++++++++++++++"   
            echo "==============================================================================================="
            fi
    fi
    done
    fi
    fi
    #+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
    echo "******************************远程发布脚本说明***********************************************************************"
    echo " "
    echo "******************************脚本参数*******************************************************************************"
    echo "**参数1 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
    echo "**参数2 配置属性中对应工程的标识:支持 1,2,3...,当为 all 的时候取全部[1,2,3...]所对应的属性**************************"
    echo "**参数3 执行的的脚本:支持 update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)**"
    echo "******************************脚本参数*******************************************************************************"
    echo " "
    echo "******************************升级版本的工程包放在 /opt/apps/deploy目录下********************************************"
    echo "******************************在/opt/apps/ssh/config.properties配置文件中配置属性************************************"
    echo "******************************工程ip如: ddp-server.1=ip**************************************************************"
    echo "******************************工程日志路径如: ddp-server.logPath=/opt/apps/ddp/log/**********************************"
    echo "******************************工程执行脚本路径如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
    echo "  "
    echo "*******************************执行方式(deploy.sh 参数1 参数2 参数3)*************************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server all update  升级所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server all rollbak 回滚所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server all stop    停止所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server all start   启动所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server all restart 重启所有的工程***************************************"
    echo " "
    echo "*************日志查看不支持all,只能够单独选择某一台日志查看**********************************************************"
    echo "**************执行脚本的方式如 deploy.sh ddp-server 1 log 查看某台机器的工程日志*************************************"
    echo "  "
    echo "******************************远程发布脚本说明***********************************************************************"
    echo "  "
    #+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
    #+++++++++++++++++参数定义部分++++++++++++++++++++++++++
    #参数一表示 工程名称
    param1=$1
    #参数二表示 配置文件中对应的属性,规则 1,2,3 分别取对应的参数,当为 all的时候取全部[1,2,3]的属性
    param2=$2
    #参数三表示 执行的的脚本支持update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)
    param3=$3
    #工程包名称
    packageName=$param1".jar"
    #升级包路径
    updatepath="/opt/apps/deploy"
    #远程机器用户
    userName="phfund"
    #ip地址
    IP=""
    #日志路径
    logPath=""
    #脚本路径
    shellPath=""
    #config.properties配置文件路径
    configPath="/opt/apps/ssh"
    #+++++++++++++++++参数定义部分++++++++++++++++++++++++++
    #+++++++++++++++++传递参数校检以及配置文件解析校检部分++++++++++
    echo "**************************************开始校检传入参数*******************************************************************"
    if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
    echo " " 
    echo "参数不能为空如:(deploy.sh 参数1 参数2 参数3) 按照空格分隔"
    echo " "
    echo "**************************************传入参数校检失败*******************************************************************"
    exit
    fi
    if [ "$param3" != "update" ]&&[ "$param3" != "restart" ]&&[ "$param3" != "stop" ]&&[ "$param3" != "start" ]&&[ "$param3" != "rollbak" ]&&[ "$param3" != "log" ];then
    echo " " 
    echo "参数3只支持: update,restart,start,stop,rollbak,log"
    echo " "
    echo "**************************************传入参数校检失败*******************************************************************"
    exit
    else
       if [ "$param3" == "log" ]&&[ "$param2" == "all" ];then
    echo " " 
    echo "查看系统日志只支持单个操作如:(deploy.sh ddp-server 1 log),参数2不支持all"
    echo " "
    echo "**************************************传入参数校检失败*******************************************************************"   
        exit
       fi
    fi
    echo " "
    echo "**************************************传入参数校检成功*******************************************************************"
    echo " "
    echo "*****************************************开始解析config.properties配置文件***********************************************" 
    echo " "
    if [ "$param2" == "all" ];then
      IP=$(cd ${configPath}; cat ./config.properties|grep ${param1}'\.'|grep -v ${param1}'\.logPath'|grep -v ${param1}'\.shellPath'|awk -F '=' '{print $2}')
    else
      IP=$(cd ${configPath};cat ./config.properties|grep ${param1}'\.'${param2}|awk -F '=' '{print $2}') 
    fi
    echo "获取工程名称为: "$param1 " IP地址: "$IP
     logPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.logPath'|awk -F '=' '{print $2}')
    echo "获取工程日志路径为: "$logPath 
     shellPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.shellPath'|awk -F '=' '{print $2}')
    echo "获取工程执行脚本路径为: "$shellPath
    echo " "
    echo "**************************************解析config.properties配置文件结束***********************************************"
    #+++++++++++++++++传递参数校检以及配置文件解析部分++++++++++
    #+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++
    echo " "
    echo "**************************************开始校检解析参数*****************************************************************"
    if [ -z $IP ];then
    echo ""
    echo "获取工程的IP为空,终止程序"
    echo " "
    echo "**************************************解析参数校检失败*****************************************************************"
    exit
    fi
    if [ -z $shellPath ];then
    echo ""
    echo "获取工程的执行脚本路径为空,终止程序"
    echo " "
    echo "**************************************解析参数校检失败*****************************************************************"
    exit
    fi
    if [ "$param3" == "log" ]&&[ -z $logPath ];then
    echo ""
    echo "查看日志,获取工程的日志路径为空,终止程序"
    echo " "
    echo "**************************************解析参数校检失败*****************************************************************"
    exit
    fi
    echo " "
    echo "**************************************解析参数校检成功*****************************************************************"
    #调度公共方法
    function remotecall(){  
        ssh  -o ConnectTimeout=10  ${ip}   'sh ' $shellPath'/'$param3'.sh ' $param1 
    }  
    #查看日志方法
    function looklog(){
       ssh  -o ConnectTimeout=10  ${ip}   'sh ' $shellPath'/'$param3'.sh ' $param1 $logPath
    }
    #远程拷贝公共方法
    function scpcall(){
        scp  -o ConnectTimeout=10 ${updatepath}/${packageName} ${userName}@${ip}:${updatepath}
    }
    for ip in $IP
    do
    if [ $param3 == 'update' ];then
    echo " "
    echo "====================================升级(update)操作执行开始==========================================================="
    echo " "
       scpcall
     if [ $? -ne 0 ];then
       echo "远程拷贝"${packageName}" 到IP为" ${ip} "机器的 "${updatepath}" 目录下失败,本次升级失败" 
     else
       echo "远程拷贝"${packageName}" 到IP为" $ip "机器的 "${updatepath}" 目录下成功,开始执行更新脚本"
       echo " "
       remotecall
       echo " "
       if [ $? -ne 0 ];then
         echo "机器IP为 "$ip "执行更新脚本失败"
       else
         echo "机器IP为 "$ip "执行更新脚本成功"
       fi 
     fi
    echo " "
    echo "====================================升级(update)操作执行结束==========================================================="
    elif [ $param3 == 'start' ];then
    echo " "
    echo "====================================启动(start)操作执行开始============================================================"
    echo " "
    remotecall
     if [ $? -ne 0 ];then
         echo "机器IP为 "$ip "执行启动脚本失败"
       else
         echo "机器IP为 "$ip "执行启动脚本成功"
       fi
    echo " "
    echo "====================================启动(start)操作执行结束============================================================"
    elif [ $param3 == 'rollbak' ];then
    echo " "
    echo "===================================回滚(rollbak)操作执行开始============================================================"
    echo " "
    remotecall
     if [ $? -ne 0 ];then
         echo "机器IP为 "$ip "执行回滚脚本失败"
       else
         echo "机器IP为 "$ip "执行回滚脚本成功"
       fi
    echo " "
    echo "====================================回滚(rollbak)操作执行结束============================================================"
    elif [ $param3 == 'stop' ];then
    echo " "
    echo "===================================停止(stop)操作执行开始============================================================"
    echo " "
    remotecall
     if [ $? -ne 0 ];then
         echo "机器IP为 "$ip "执行停止脚本失败"
       else
         echo "机器IP为 "$ip "执行停止脚本成功"
       fi
    echo " "
    echo "====================================停止(stop)操作执行结束============================================================"
    elif [ $param3 == 'log' ];then
    echo " "
    echo "===================================查看日志(log)操作执行开始============================================================"
    echo " "
     looklog
     if [ $? -ne 0 ];then
         echo "机器IP为 "$ip "执行日志查看脚本失败"
       else
         echo "机器IP为 "$ip "执行日志查看脚本成功"
       fi
    echo " "
    echo "====================================查看日志(log)操作执行结束============================================================"
    elif [ $param3 == 'restart' ];then
    echo " "
    echo "======================================重启(restart)操作执行开始=========================================================="
    echo " "
    remotecall
     if [ $? -ne 0 ];then
         echo "机器IP为 "$ip "执行重启脚本失败"
       else
         echo "机器IP为 "$ip "执行重启脚本成功"
       fi
    echo " "
    echo "=====================================重启(restart)操作执行结束============================================================"
    fi
    done
    #+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++

    优化版本入口

    #!/bin/bash
    #+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
    help=$1
    if [ "${help^^}" == "-HELP" ];then
    echo "******************************远程发布脚本说明***********************************************************************"
    echo " "
    echo "******************************脚本参数*******************************************************************************"
    echo "**参数1 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
    echo "**参数2 执行的的脚本:支持 update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)**"
    echo "**参数3 配置属性中对应工程机器的标识:支持 ddp-server1,ddp-server2,ddp-server3...,当为 all 的时候取全部[ddp-server1,*"
    echo "***************ddp-server2,ddp-server3.]所对应的属性*****************************************************************"
    echo "******************************脚本参数*******************************************************************************"
    echo " "
    echo "******************************升级版本的工程包放在 /opt/apps/deploy目录下********************************************"
    echo "******************************在/opt/apps/ssh/config.properties配置文件中配置属性************************************"
    echo "******************************工程ip如: ddp-server.1=ip**************************************************************"
    echo "******************************工程日志路径如: ddp-server.logPath=/opt/apps/ddp/log/**********************************"
    echo "******************************工程执行脚本路径如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
    echo "  "
    echo "*******************************执行方式(deploy.sh 参数1 参数2 参数3)*************************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server  update all 升级所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server  rollbak all回滚所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server  stop all   停止所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server  start all  启动所有的工程***************************************"
    echo "*************执行脚本的方式如  deploy.sh ddp-server restart all 重启所有的工程***************************************"
    echo " "
    echo "*************日志查看不支持all,只能够单独选择某一台日志查看**********************************************************"
    echo "**************执行脚本的方式如 deploy.sh ddp-server log ddp-server1 查看某台机器的工程日志***************************"
    echo " "
    echo "*************脚本对应2个参数的语法,只支持以下语法查询 参数3 支持的个数**********************************************"
    echo "**************查询某个工程对应的机器的标识如 deploy.sh 参数1 listserver 查看对应的机器参数个数***********************"
    echo "  "
    echo "******************************远程发布脚本说明***********************************************************************"
    echo "  "
    exit
    fi
    #+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
    #+++++++++++++++++参数定义部分++++++++++++++++++++++++++
    #参数一表示 工程名称
    param1=$1
    #参数二表示 配置文件中对应的属性,规则 1,2,3 分别取对应的参数,当为 all的时候取全部[1,2,3]的属性
    param2=$2
    #参数三表示 执行的的脚本支持update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)
    param3=$3
    #工程包名称
    packageName=$param1".jar"
    #升级包路径
    updatepath="/opt/apps/deploy"
    #远程机器用户
    userName="phfund"
    #ip地址
    IP=""
    #日志路径
    logPath=""
    #脚本路径
    shellPath=""
    #config.properties配置文件路径
    configPath="/opt/apps/ssh"
    #+++++++++++++++++参数定义部分++++++++++++++++++++++++++
    #+++++++++++++++++传递参数校检以及配置文件解析校检部分++++++++++
    if [ -z $param3 ]&&[ -n $param1 ] && [ -n $param2 ];then
     if [ "${param2^^}" == "LISTSERVER" ];then
      echo "**************************************获取工程所部署的机器(执行脚本参数3 可选的值)**************************************"
       list=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $1}')
       echo "工程对应机器名称(参数3)可选值:" $list
      echo ""
      echo "**************************************获取工程所部署的机器(执行脚本参数3 可选的值)**************************************"
      exit
     fi
    fi
    echo "**************************************开始校检传入参数*******************************************************************"
    if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
    echo " " 
    echo "参数不能为空如:(deploy.sh 参数1 参数2 参数3) 按照空格分隔"
    echo " "
    echo "**************************************传入参数校检失败*******************************************************************"
    exit
    fi
    if [ "$param2" != "update" ]&&[ "$param2" != "restart" ]&&[ "$param2" != "stop" ]&&[ "$param2" != "start" ]&&[ "$param2" != "rollbak" ]&&[ "$param2" != "log" ];then
    echo " " 
    echo "参数2只支持: update,restart,start,stop,rollbak,log"
    echo " "
    echo "**************************************传入参数校检失败*******************************************************************"
    exit
    else
       if [ "$param2" == "log" ]&&[ "$param3" == "all" ];then
    echo " " 
    echo "查看系统日志只支持单个操作如:(deploy.sh ddp-server log ddp-server1),参数3不支持all"
    echo " "
    echo "**************************************传入参数校检失败*******************************************************************"   
        exit
       fi
    fi
    echo " "
    echo "**************************************传入参数校检成功*******************************************************************"
    echo " "
    echo "*****************************************开始解析config.properties配置文件***********************************************" 
    echo " "
    if [ "$param3" == "all" ];then
      IP=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $2}')
    else
      IP=$(cd ${configPath};cat ./config.properties|grep ${param3}"="|awk -F '=' '{print $2}') 
    fi
    echo "获取工程名称为: "$param1 " IP地址: "$IP
     logPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.logPath'|awk -F '=' '{print $2}')
    echo "获取工程日志路径为: "$logPath 
     shellPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.shellPath'|awk -F '=' '{print $2}')
    echo "获取工程执行脚本路径为: "$shellPath
    echo " "
    echo "**************************************解析config.properties配置文件结束***********************************************"
    #+++++++++++++++++传递参数校检以及配置文件解析部分++++++++++
    #+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++
    echo " "
    echo "**************************************开始校检解析参数*****************************************************************"
    if [ -z "$IP" ];then
    echo ""
    echo "获取工程的IP为空,终止程序"
    echo " "
    echo "**************************************解析参数校检失败*****************************************************************"
    exit
    fi
    if [ -z $shellPath ];then
    echo ""
    echo "获取工程的执行脚本路径为空,终止程序"
    echo " "
    echo "**************************************解析参数校检失败*****************************************************************"
    exit
    fi
    if [ "$param2" == "log" ]&&[ -z $logPath ];then
    echo ""
    echo "查看日志,获取工程的日志路径为空,终止程序"
    echo " "
    echo "**************************************解析参数校检失败*****************************************************************"
    exit
    fi
    echo " "
    echo "**************************************解析参数校检成功*****************************************************************"
    #将变量传递到子脚本
    export updatepath
    export packageName
    export userName
    export shellPath
    export param2
    export param1
    export logPath
    for ip in $IP
    do
    export ip
    if [ $param2 == 'update' ];then
    #执行更新脚本
    sh update.sh
    elif [ $param2 == 'start' ];then
    #执行启动脚本
    sh start.sh
    elif [ $param2 == 'rollbak' ];then
    #执行回滚脚本
    sh rollbak.sh
    elif [ $param2 == 'stop' ];then
    #执行停止脚本
    sh stop.sh
    elif [ $param2 == 'log' ];then
    #执行日志查看
    sh log.sh
    elif [ $param2 == 'restart' ];then
    #执行重启脚本
    sh restart.sh
    fi
    done
    #+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。

    您可能感兴趣的文章:
    • Linux编辑启动、停止与重启springboot jar包脚本实例
    • Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法
    • Linux下部署springboot项目的方法步骤

    相关内容