日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 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'

    命令執行結果截圖如下

    shell腳本如何啟動springboot項目

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

    命令取出上圖中指出的pid

    shell腳本如何啟動springboot項目

    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
    #+++++++++++++++++解析參數驗證,以及執行調度部分++++++++++++

    總結

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。

    分享到:
    標簽:shell 啟動 服務器 腳本 項目
    用戶無頭像

    網友整理

    注冊時間:

    網站:5 個   小程序:0 個  文章:12 篇

    • 51998

      網站

    • 12

      小程序

    • 1030137

      文章

    • 747

      會員

    趕快注冊賬號,推廣您的網站吧!
    最新入駐小程序

    數獨大挑戰2018-06-03

    數獨一種數學游戲,玩家需要根據9

    答題星2018-06-03

    您可以通過答題星輕松地創建試卷

    全階人生考試2018-06-03

    各種考試題,題庫,初中,高中,大學四六

    運動步數有氧達人2018-06-03

    記錄運動步數,積累氧氣值。還可偷

    每日養生app2018-06-03

    每日養生,天天健康

    體育訓練成績評定2018-06-03

    通用課目體育訓練成績評定