目錄
- 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 #+++++++++++++++++解析參數驗證,以及執行調度部分++++++++++++
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。