欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell腳本如何啟動springboot項(xiàng)目

 更新時間:2023年06月20日 15:01:46   作者:yuanteng101  
這篇文章主要介紹了shell腳本如何啟動springboot項(xiàng)目問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

shell腳本啟動springboot項(xiàng)目

Spring Boot項(xiàng)目啟動

我們知道打包好的Spring Boot項(xiàng)目這樣啟動

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

在linux中,常常使用nohup后臺啟動其他程序,Spring Boot項(xiàng)目使用nohup啟動如下

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

如果使用上面命令啟動,注意這時候遠(yuǎn)程terminal要主動exit退出,不這樣做系統(tǒng)可能會殺掉上面啟動的進(jìn)程

由于開發(fā)需要,需要頻繁地更新項(xiàng)目,寫了兩個shell腳本啟動和關(guān)閉項(xiàng)目

  • 啟動項(xiàng)目腳本 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 &
  • 關(guān)閉項(xiàng)目腳本
#!/bin/bash
sudo kill $(ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}')

上面腳本使用ps命令查到ccd2002項(xiàng)目的信息,然后使用awk過濾信息獲取項(xiàng)目pid,最后使用kill殺掉項(xiàng)目。

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

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

命令執(zhí)行結(jié)果截圖如下

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

命令取出上圖中指出的pid

awk命令對ps結(jié)果進(jìn)行處理,awk 'NR==2{print $2}'中的NR=2表示ps結(jié)果的第二行,$2表示行中的第二個元素

springboot項(xiàng)目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 "############################執(zhí)行update.sh開始###########################"
echo "基礎(chǔ)路徑:$basepath"
echo "遠(yuǎn)程傳遞參數(shù)為:" ${1}
if [ -z ${1} ];then?
echo "工程名稱參數(shù)傳遞為空,更新失敗"
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 "工程包備份成功"
? ? ? ? #停止應(yīng)用 ? ?
? ? ? ? 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
? ? ? ? #啟動應(yīng)用
? ? ? ? sh $basepath/start.sh
? ? ? ? else
? ? ? ? ? echo "工程包移動失敗"
? ? ? ? fi
else
?echo "升級包不存在"
fi
fi
echo "############################執(zhí)行update.sh結(jié)束###########################"

4、回滾腳本

#!/bin/bash
basepath=$(cd $(dirname $0); pwd)
echo "基礎(chǔ)路徑:$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 "遠(yuǎn)程傳遞參數(shù)為:"${1}
if [ -z ${1} ];then
echo "工程名稱參數(shù)為空,回滾失敗"
else
#將備份包還原在啟動
cp $basepath/../appBak/$packageName $basepath/../../deploy/${1}.jar
if [ -f "$basepath/../../deploy/"${1}".jar" ];then
? ? ? ? #停止應(yīng)用 ? ?
? ? ? ? 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 "回滾還原包成功"
? ? ? ? #啟動應(yīng)用
? ? ? ? sh $basepath/start.sh
? ? ? ? else
? ? ? ? ? echo ?"工程包還原失敗"
? ? ? ? fi
else
?echo "還原包不存在"
fi
fi
fi

5.遠(yuǎn)程發(fā)布腳本(前提配置免密登錄)

#!/bin/bash
echo "******************************遠(yuǎn)程發(fā)布腳本***********************************************************"
echo " "
echo "********腳本參數(shù) 工程名稱:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-ext、********"
echo "********ddp-server-task、dmsp-gateway 腳本類型:支持 update(更新腳本)/rollbak(回滾腳本)***************"
echo "*******將上述工程名對應(yīng)的jar包放在 /opt/apps/deploy目錄下********************************************"
echo "********在config.properties配置文件中,配置工程對應(yīng)的服務(wù)器IP多臺機(jī)器則以逗號(,)分隔。***************"
echo "********如 ddp-server=192.168.1.2,192.178.3.4 的形式配置工程對應(yīng)的機(jī)器*******************************"
echo "*************執(zhí)行腳本的方式如  sh deploy.sh ddp-server update  升級**********************************"
echo "*************執(zhí)行腳本的方式如  sh deploy.sh ddp-server rollbak 回滾**********************************"
echo "  "
echo "******************************遠(yuǎn)程發(fā)布腳本***********************************************************"
echo "     "
echo "##############################開始校檢參數(shù)############################################################"
if [ -z $1 ]||[ -z $2 ];then
echo " "
echo '參數(shù)不能為空,如: sh deploy.sh ddp-server update'
echo ""
echo "##############################參數(shù)校檢失敗############################################################"
else
echo " "
echo "##############################參數(shù)校檢成功############################################################"
echo "    "
echo "#############################開始校檢配置文件#########################################################"
echo "  "
path="/opt/apps/deploy"
echo "遠(yuǎn)程發(fā)布包的路徑為:" $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 "遠(yuǎn)程腳本路徑為:"$shellpath
#工程模塊名稱
modle=$(cat config.properties |grep  $1"=" |awk -F '=' '{print $1}')
echo "工程名稱為:"$modle
ips=$(cat config.properties |grep  $1"="|awk -F '=' '{print $2}')
echo 目標(biāo)ip為:$ips
echo " "
if [ -z $modle ];then
echo "###########工程在配置文件(config.properties)中不存在,腳本執(zhí)行終止#####################################"
elif [ -z $ips ]; then
echo "#############工程對應(yīng)的目標(biāo)機(jī)器ip在配置文件(config.properties)中不存在,腳本執(zhí)行終止##################"
elif [ -z $shellpath ];then
echo "############################"$1"不支持遠(yuǎn)程操作,腳本執(zhí)行終止##########################################"
elif [ $2 != 'update' ] && [ $2 != 'rollbak' ];then
echo "############################遠(yuǎn)程操作僅支持 update 或 rollbak,腳本執(zhí)行終止############################"
else
echo "###################配置文件校檢通過,開始更新或回滾操作###############################################"
OLD_IFS="$IFS"
IFS=","
#如下會自動分隔
arr=($ips)
#恢復(fù)原來的分隔符
IFS="$OLD_IFS"
#遍歷數(shù)組
for ip in ${arr[@]}
do
 if [ $2 == 'update' ];then
  echo "     "
  echo "====================================================================================================="
  echo "++++++++++++++++++++++++++++++++++++"${ip}"開始執(zhí)行更新操作++++++++++++++++++++++++++++++++"
  echo "     "
  echo "開始遠(yuǎn)程拷貝文件" ${modle}".jar 到機(jī)器ip為: "${ip} ${path}"的目錄下"
   scp  -o ConnectTimeout=10 ${path}/${modle}.jar phfund@${ip}:${path}
  if [ $? -ne 0 ];then
      echo "遠(yuǎn)程拷貝"${modle}".jar 到 " ${ip} " 失敗,本次更新失敗"
      echo "  "
     echo "======================================================================================================"
  else
     echo "遠(yuǎn)程拷貝"  ${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}"開始執(zhí)行回滾操作++++++++++++++"
     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 "******************************遠(yuǎn)程發(fā)布腳本說明***********************************************************************"
echo " "
echo "******************************腳本參數(shù)*******************************************************************************"
echo "**參數(shù)1 工程名稱:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
echo "**參數(shù)2 配置屬性中對應(yīng)工程的標(biāo)識:支持 1,2,3...,當(dāng)為 all 的時候取全部[1,2,3...]所對應(yīng)的屬性**************************"
echo "**參數(shù)3 執(zhí)行的的腳本:支持 update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動),stop(停止),restart(重啟)**"
echo "******************************腳本參數(shù)*******************************************************************************"
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 "******************************工程執(zhí)行腳本路徑如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
echo "  "
echo "*******************************執(zhí)行方式(deploy.sh 參數(shù)1 參數(shù)2 參數(shù)3)*************************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server all update  升級所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server all rollbak 回滾所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server all stop    停止所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server all start   啟動所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server all restart 重啟所有的工程***************************************"
echo " "
echo "*************日志查看不支持all,只能夠單獨(dú)選擇某一臺日志查看**********************************************************"
echo "**************執(zhí)行腳本的方式如 deploy.sh ddp-server 1 log 查看某臺機(jī)器的工程日志*************************************"
echo "  "
echo "******************************遠(yuǎn)程發(fā)布腳本說明***********************************************************************"
echo "  "
#+++++++++++++++++腳本說明++++++++++++++++++++++++++++++
#+++++++++++++++++參數(shù)定義部分++++++++++++++++++++++++++
#參數(shù)一表示 工程名稱
param1=$1
#參數(shù)二表示 配置文件中對應(yīng)的屬性,規(guī)則 1,2,3 分別取對應(yīng)的參數(shù),當(dāng)為 all的時候取全部[1,2,3]的屬性
param2=$2
#參數(shù)三表示 執(zhí)行的的腳本支持update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動),stop(停止),restart(重啟)
param3=$3
#工程包名稱
packageName=$param1".jar"
#升級包路徑
updatepath="/opt/apps/deploy"
#遠(yuǎn)程機(jī)器用戶
userName="phfund"
#ip地址
IP=""
#日志路徑
logPath=""
#腳本路徑
shellPath=""
#config.properties配置文件路徑
configPath="/opt/apps/ssh"
#+++++++++++++++++參數(shù)定義部分++++++++++++++++++++++++++
#+++++++++++++++++傳遞參數(shù)校檢以及配置文件解析校檢部分++++++++++
echo "**************************************開始校檢傳入?yún)?shù)*******************************************************************"
if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
echo " " 
echo "參數(shù)不能為空如:(deploy.sh 參數(shù)1 參數(shù)2 參數(shù)3) 按照空格分隔"
echo " "
echo "**************************************傳入?yún)?shù)校檢失敗*******************************************************************"
exit
fi
if [ "$param3" != "update" ]&&[ "$param3" != "restart" ]&&[ "$param3" != "stop" ]&&[ "$param3" != "start" ]&&[ "$param3" != "rollbak" ]&&[ "$param3" != "log" ];then
echo " " 
echo "參數(shù)3只支持: update,restart,start,stop,rollbak,log"
echo " "
echo "**************************************傳入?yún)?shù)校檢失敗*******************************************************************"
exit
else
   if [ "$param3" == "log" ]&&[ "$param2" == "all" ];then
echo " " 
echo "查看系統(tǒng)日志只支持單個操作如:(deploy.sh ddp-server 1 log),參數(shù)2不支持all"
echo " "
echo "**************************************傳入?yún)?shù)校檢失敗*******************************************************************"   
    exit
   fi
fi
echo " "
echo "**************************************傳入?yún)?shù)校檢成功*******************************************************************"
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 "獲取工程執(zhí)行腳本路徑為: "$shellPath
echo " "
echo "**************************************解析config.properties配置文件結(jié)束***********************************************"
#+++++++++++++++++傳遞參數(shù)校檢以及配置文件解析部分++++++++++
#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++
echo " "
echo "**************************************開始校檢解析參數(shù)*****************************************************************"
if [ -z $IP ];then
echo ""
echo "獲取工程的IP為空,終止程序"
echo " "
echo "**************************************解析參數(shù)校檢失敗*****************************************************************"
exit
fi
if [ -z $shellPath ];then
echo ""
echo "獲取工程的執(zhí)行腳本路徑為空,終止程序"
echo " "
echo "**************************************解析參數(shù)校檢失敗*****************************************************************"
exit
fi
if [ "$param3" == "log" ]&&[ -z $logPath ];then
echo ""
echo "查看日志,獲取工程的日志路徑為空,終止程序"
echo " "
echo "**************************************解析參數(shù)校檢失敗*****************************************************************"
exit
fi
echo " "
echo "**************************************解析參數(shù)校檢成功*****************************************************************"
#調(diào)度公共方法
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
}
#遠(yuǎn)程拷貝公共方法
function scpcall(){
    scp  -o ConnectTimeout=10 ${updatepath}/${packageName} ${userName}@${ip}:${updatepath}
}
for ip in $IP
do
if [ $param3 == 'update' ];then
echo " "
echo "====================================升級(update)操作執(zhí)行開始==========================================================="
echo " "
   scpcall
 if [ $? -ne 0 ];then
   echo "遠(yuǎn)程拷貝"${packageName}" 到IP為" ${ip} "機(jī)器的 "${updatepath}" 目錄下失敗,本次升級失敗" 
 else
   echo "遠(yuǎn)程拷貝"${packageName}" 到IP為" $ip "機(jī)器的 "${updatepath}" 目錄下成功,開始執(zhí)行更新腳本"
   echo " "
   remotecall
   echo " "
   if [ $? -ne 0 ];then
     echo "機(jī)器IP為 "$ip "執(zhí)行更新腳本失敗"
   else
     echo "機(jī)器IP為 "$ip "執(zhí)行更新腳本成功"
   fi 
 fi
echo " "
echo "====================================升級(update)操作執(zhí)行結(jié)束==========================================================="
elif [ $param3 == 'start' ];then
echo " "
echo "====================================啟動(start)操作執(zhí)行開始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "機(jī)器IP為 "$ip "執(zhí)行啟動腳本失敗"
   else
     echo "機(jī)器IP為 "$ip "執(zhí)行啟動腳本成功"
   fi
echo " "
echo "====================================啟動(start)操作執(zhí)行結(jié)束============================================================"
elif [ $param3 == 'rollbak' ];then
echo " "
echo "===================================回滾(rollbak)操作執(zhí)行開始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "機(jī)器IP為 "$ip "執(zhí)行回滾腳本失敗"
   else
     echo "機(jī)器IP為 "$ip "執(zhí)行回滾腳本成功"
   fi
echo " "
echo "====================================回滾(rollbak)操作執(zhí)行結(jié)束============================================================"
elif [ $param3 == 'stop' ];then
echo " "
echo "===================================停止(stop)操作執(zhí)行開始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "機(jī)器IP為 "$ip "執(zhí)行停止腳本失敗"
   else
     echo "機(jī)器IP為 "$ip "執(zhí)行停止腳本成功"
   fi
echo " "
echo "====================================停止(stop)操作執(zhí)行結(jié)束============================================================"
elif [ $param3 == 'log' ];then
echo " "
echo "===================================查看日志(log)操作執(zhí)行開始============================================================"
echo " "
 looklog
 if [ $? -ne 0 ];then
     echo "機(jī)器IP為 "$ip "執(zhí)行日志查看腳本失敗"
   else
     echo "機(jī)器IP為 "$ip "執(zhí)行日志查看腳本成功"
   fi
echo " "
echo "====================================查看日志(log)操作執(zhí)行結(jié)束============================================================"
elif [ $param3 == 'restart' ];then
echo " "
echo "======================================重啟(restart)操作執(zhí)行開始=========================================================="
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "機(jī)器IP為 "$ip "執(zhí)行重啟腳本失敗"
   else
     echo "機(jī)器IP為 "$ip "執(zhí)行重啟腳本成功"
   fi
echo " "
echo "=====================================重啟(restart)操作執(zhí)行結(jié)束============================================================"
fi
done
#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++

優(yōu)化版本入口

#!/bin/bash
#+++++++++++++++++腳本說明++++++++++++++++++++++++++++++
help=$1
if [ "${help^^}" == "-HELP" ];then
echo "******************************遠(yuǎn)程發(fā)布腳本說明***********************************************************************"
echo " "
echo "******************************腳本參數(shù)*******************************************************************************"
echo "**參數(shù)1 工程名稱:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
echo "**參數(shù)2 執(zhí)行的的腳本:支持 update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動),stop(停止),restart(重啟)**"
echo "**參數(shù)3 配置屬性中對應(yīng)工程機(jī)器的標(biāo)識:支持 ddp-server1,ddp-server2,ddp-server3...,當(dāng)為 all 的時候取全部[ddp-server1,*"
echo "***************ddp-server2,ddp-server3.]所對應(yīng)的屬性*****************************************************************"
echo "******************************腳本參數(shù)*******************************************************************************"
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 "******************************工程執(zhí)行腳本路徑如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
echo "  "
echo "*******************************執(zhí)行方式(deploy.sh 參數(shù)1 參數(shù)2 參數(shù)3)*************************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server  update all 升級所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server  rollbak all回滾所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server  stop all   停止所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server  start all  啟動所有的工程***************************************"
echo "*************執(zhí)行腳本的方式如  deploy.sh ddp-server restart all 重啟所有的工程***************************************"
echo " "
echo "*************日志查看不支持all,只能夠單獨(dú)選擇某一臺日志查看**********************************************************"
echo "**************執(zhí)行腳本的方式如 deploy.sh ddp-server log ddp-server1 查看某臺機(jī)器的工程日志***************************"
echo " "
echo "*************腳本對應(yīng)2個參數(shù)的語法,只支持以下語法查詢 參數(shù)3 支持的個數(shù)**********************************************"
echo "**************查詢某個工程對應(yīng)的機(jī)器的標(biāo)識如 deploy.sh 參數(shù)1 listserver 查看對應(yīng)的機(jī)器參數(shù)個數(shù)***********************"
echo "  "
echo "******************************遠(yuǎn)程發(fā)布腳本說明***********************************************************************"
echo "  "
exit
fi
#+++++++++++++++++腳本說明++++++++++++++++++++++++++++++
#+++++++++++++++++參數(shù)定義部分++++++++++++++++++++++++++
#參數(shù)一表示 工程名稱
param1=$1
#參數(shù)二表示 配置文件中對應(yīng)的屬性,規(guī)則 1,2,3 分別取對應(yīng)的參數(shù),當(dāng)為 all的時候取全部[1,2,3]的屬性
param2=$2
#參數(shù)三表示 執(zhí)行的的腳本支持update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動),stop(停止),restart(重啟)
param3=$3
#工程包名稱
packageName=$param1".jar"
#升級包路徑
updatepath="/opt/apps/deploy"
#遠(yuǎn)程機(jī)器用戶
userName="phfund"
#ip地址
IP=""
#日志路徑
logPath=""
#腳本路徑
shellPath=""
#config.properties配置文件路徑
configPath="/opt/apps/ssh"
#+++++++++++++++++參數(shù)定義部分++++++++++++++++++++++++++
#+++++++++++++++++傳遞參數(shù)校檢以及配置文件解析校檢部分++++++++++
if [ -z $param3 ]&&[ -n $param1 ] && [ -n $param2 ];then
 if [ "${param2^^}" == "LISTSERVER" ];then
  echo "**************************************獲取工程所部署的機(jī)器(執(zhí)行腳本參數(shù)3 可選的值)**************************************"
   list=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $1}')
   echo "工程對應(yīng)機(jī)器名稱(參數(shù)3)可選值:" $list
  echo ""
  echo "**************************************獲取工程所部署的機(jī)器(執(zhí)行腳本參數(shù)3 可選的值)**************************************"
  exit
 fi
fi
echo "**************************************開始校檢傳入?yún)?shù)*******************************************************************"
if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
echo " " 
echo "參數(shù)不能為空如:(deploy.sh 參數(shù)1 參數(shù)2 參數(shù)3) 按照空格分隔"
echo " "
echo "**************************************傳入?yún)?shù)校檢失敗*******************************************************************"
exit
fi
if [ "$param2" != "update" ]&&[ "$param2" != "restart" ]&&[ "$param2" != "stop" ]&&[ "$param2" != "start" ]&&[ "$param2" != "rollbak" ]&&[ "$param2" != "log" ];then
echo " " 
echo "參數(shù)2只支持: update,restart,start,stop,rollbak,log"
echo " "
echo "**************************************傳入?yún)?shù)校檢失敗*******************************************************************"
exit
else
   if [ "$param2" == "log" ]&&[ "$param3" == "all" ];then
echo " " 
echo "查看系統(tǒng)日志只支持單個操作如:(deploy.sh ddp-server log ddp-server1),參數(shù)3不支持all"
echo " "
echo "**************************************傳入?yún)?shù)校檢失敗*******************************************************************"   
    exit
   fi
fi
echo " "
echo "**************************************傳入?yún)?shù)校檢成功*******************************************************************"
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 "獲取工程執(zhí)行腳本路徑為: "$shellPath
echo " "
echo "**************************************解析config.properties配置文件結(jié)束***********************************************"
#+++++++++++++++++傳遞參數(shù)校檢以及配置文件解析部分++++++++++
#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++
echo " "
echo "**************************************開始校檢解析參數(shù)*****************************************************************"
if [ -z "$IP" ];then
echo ""
echo "獲取工程的IP為空,終止程序"
echo " "
echo "**************************************解析參數(shù)校檢失敗*****************************************************************"
exit
fi
if [ -z $shellPath ];then
echo ""
echo "獲取工程的執(zhí)行腳本路徑為空,終止程序"
echo " "
echo "**************************************解析參數(shù)校檢失敗*****************************************************************"
exit
fi
if [ "$param2" == "log" ]&&[ -z $logPath ];then
echo ""
echo "查看日志,獲取工程的日志路徑為空,終止程序"
echo " "
echo "**************************************解析參數(shù)校檢失敗*****************************************************************"
exit
fi
echo " "
echo "**************************************解析參數(shù)校檢成功*****************************************************************"
#將變量傳遞到子腳本
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
#執(zhí)行更新腳本
sh update.sh
elif [ $param2 == 'start' ];then
#執(zhí)行啟動腳本
sh start.sh
elif [ $param2 == 'rollbak' ];then
#執(zhí)行回滾腳本
sh rollbak.sh
elif [ $param2 == 'stop' ];then
#執(zhí)行停止腳本
sh stop.sh
elif [ $param2 == 'log' ];then
#執(zhí)行日志查看
sh log.sh
elif [ $param2 == 'restart' ];then
#執(zhí)行重啟腳本
sh restart.sh
fi
done
#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論