文章詳情頁
shell腳本如何啟動(dòng)springboot項(xiàng)目
瀏覽:156日期:2023-09-23 20:55:12
目錄shell腳本啟動(dòng)springboot項(xiàng)目Spring Boot項(xiàng)目啟動(dòng)springboot項(xiàng)目linux簡單的啟動(dòng)、停止、更新腳本sh1.啟動(dòng)腳本2.停止腳本3.版本升級腳本4、回滾腳本5.遠(yuǎn)程發(fā)布腳本(前提配置免密登錄)總結(jié)shell腳本啟動(dòng)springboot項(xiàng)目Spring Boot項(xiàng)目啟動(dòng)
我們知道打包好的Spring Boot項(xiàng)目這樣啟動(dòng)
java -jar -Dfile.encoding=utf-8 test-0.0.1-SNAPSHOT.jar在linux中,常常使用nohup后臺啟動(dòng)其他程序,Spring Boot項(xiàng)目使用nohup啟動(dòng)如下
nohup java -jar -Dfile.encoding=utf-8 test-0.0.1-SNAPSHOT.jar &如果使用上面命令啟動(dòng),注意這時(shí)候遠(yuǎn)程terminal要主動(dòng)exit退出,不這樣做系統(tǒng)可能會(huì)殺掉上面啟動(dòng)的進(jìn)程
由于開發(fā)需要,需要頻繁地更新項(xiàng)目,寫了兩個(gè)shell腳本啟動(dòng)和關(guān)閉項(xiàng)目
啟動(dòng)項(xiàng)目腳本 start.sh#!/bin/bashcd 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/bashsudo 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é)果截圖如下

命令取出上圖中指出的pid

awk命令對ps結(jié)果進(jìn)行處理,awk 'NR==2{print $2}'中的NR=2表示ps結(jié)果的第二行,$2表示行中的第二個(gè)元素
springboot項(xiàng)目linux簡單的啟動(dòng)、停止、更新腳本sh1.啟動(dòng)腳本#!/bin/bash#獲取路徑basepath=$(cd $(dirname $0); pwd)echo ?'xxxxxx ?啟動(dòng)開始.............'nohup java -jar ?$basepath/xxxxxx.jar ?--spring.profiles.active=prd >/dev/null 2>&1&echo ?'xxxxxx ?啟動(dòng)成功.............'2.停止腳本#!/bin/bashecho 'xxxxxx ? ?停止開始.......'ID=`ps -ef | grep 'xxxxxx.jar' | grep -v 'grep' | awk '{print $2}'`echo $IDfor id in $IDdokill -9 $idecho 'killed $id'donesleep 5secho 'xxxxxx ? ?停止成功.......'3.版本升級腳本#!/bin/bashbasepath=$(cd $(dirname $0); pwd)echo '############################執(zhí)行update.sh開始###########################'echo '基礎(chǔ)路徑:$basepath'echo '遠(yuǎn)程傳遞參數(shù)為:' ${1}if [ -z ${1} ];then?echo '工程名稱參數(shù)傳遞為空,更新失敗'elseif [ -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? ? ? ? #啟動(dòng)應(yīng)用? ? ? ? sh $basepath/start.sh? ? ? ? else? ? ? ? ? echo '工程包移動(dòng)失敗'? ? ? ? fielse?echo '升級包不存在'fifiecho '############################執(zhí)行update.sh結(jié)束###########################'4、回滾腳本#!/bin/bashbasepath=$(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 '獲取回滾包名稱為:'$packageNameif [ -z $packageName ];then? ?echo '回滾 '$1' 包不存在,回滾失敗'elseecho '遠(yuǎn)程傳遞參數(shù)為:'${1}if [ -z ${1} ];thenecho '工程名稱參數(shù)為空,回滾失敗'else#將備份包還原在啟動(dòng)cp $basepath/../appBak/$packageName $basepath/../../deploy/${1}.jarif [ -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 '回滾還原包成功'? ? ? ? #啟動(dòng)應(yīng)用? ? ? ? sh $basepath/start.sh? ? ? ? else? ? ? ? ? echo ?'工程包還原失敗'? ? ? ? fielse?echo '還原包不存在'fififi5.遠(yuǎn)程發(fā)布腳本(前提配置免密登錄)#!/bin/bashecho '******************************遠(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 ];thenecho ' 'echo '參數(shù)不能為空,如: sh deploy.sh ddp-server update'echo ''echo '##############################參數(shù)校檢失敗############################################################'elseecho ' 'echo '##############################參數(shù)校檢成功############################################################'echo ' 'echo '#############################開始校檢配置文件#########################################################'echo ' 'path='/opt/apps/deploy'echo '遠(yuǎn)程發(fā)布包的路徑為:' $pathshellpath=''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 '工程名稱為:'$modleips=$(cat config.properties |grep $1'='|awk -F '=' '{print $2}')echo 目標(biāo)ip為:$ipsecho ' 'if [ -z $modle ];thenecho '###########工程在配置文件(config.properties)中不存在,腳本執(zhí)行終止#####################################'elif [ -z $ips ]; thenecho '#############工程對應(yīng)的目標(biāo)機(jī)器ip在配置文件(config.properties)中不存在,腳本執(zhí)行終止##################'elif [ -z $shellpath ];thenecho '############################'$1'不支持遠(yuǎn)程操作,腳本執(zhí)行終止##########################################'elif [ $2 != 'update' ] && [ $2 != 'rollbak' ];thenecho '############################遠(yuǎn)程操作僅支持 update 或 rollbak,腳本執(zhí)行終止############################'elseecho '###################配置文件校檢通過,開始更新或回滾操作###############################################'OLD_IFS='$IFS'IFS=','#如下會(huì)自動(dòng)分隔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 fielif [ $2=='rollbak' ];then echo ' ' echo '==================================================================================================='echo '+++++++++++++++++++++++++++++++++++++++++++++++++++'${ip}'開始執(zhí)行回滾操作++++++++++++++' echo ' ' ssh -o ConnectTimeout=10 ${ip} ' sh '${shellpath}'/'$2'.sh ' $1 if [ $? -ne 0 ];thenecho ' 'echo '+++++++++++++++++++++++++++++++++++++++++++++++'${ip}'回滾操作失敗++++++++++++++++++++' echo '===============================================================================================' elseecho ' 'echo '+++++++++++++++++++++++++++++++++++++++++++++'${ip}'回滾操作成功++++++++++++++++++++++' echo '==============================================================================================='fifidonefifi#+++++++++++++++++腳本說明++++++++++++++++++++++++++++++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 的時(shí)候取全部[1,2,3...]所對應(yīng)的屬性**************************'echo '**參數(shù)3 執(zhí)行的的腳本:支持 update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動(dòng)),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 啟動(dòng)所有的工程***************************************'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的時(shí)候取全部[1,2,3]的屬性param2=$2#參數(shù)三表示 執(zhí)行的的腳本支持update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動(dòng)),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 ] ;thenecho ' ' echo '參數(shù)不能為空如:(deploy.sh 參數(shù)1 參數(shù)2 參數(shù)3) 按照空格分隔'echo ' 'echo '**************************************傳入?yún)?shù)校檢失敗*******************************************************************'exitfiif [ '$param3' != 'update' ]&&[ '$param3' != 'restart' ]&&[ '$param3' != 'stop' ]&&[ '$param3' != 'start' ]&&[ '$param3' != 'rollbak' ]&&[ '$param3' != 'log' ];thenecho ' ' echo '參數(shù)3只支持: update,restart,start,stop,rollbak,log'echo ' 'echo '**************************************傳入?yún)?shù)校檢失敗*******************************************************************'exitelse if [ '$param3' == 'log' ]&&[ '$param2' == 'all' ];thenecho ' ' echo '查看系統(tǒng)日志只支持單個(gè)操作如:(deploy.sh ddp-server 1 log),參數(shù)2不支持all'echo ' 'echo '**************************************傳入?yún)?shù)校檢失敗*******************************************************************' exit fifiecho ' '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}') fiecho '獲取工程名稱為: '$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í)行腳本路徑為: '$shellPathecho ' 'echo '**************************************解析config.properties配置文件結(jié)束***********************************************'#+++++++++++++++++傳遞參數(shù)校檢以及配置文件解析部分++++++++++#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++echo ' 'echo '**************************************開始校檢解析參數(shù)*****************************************************************'if [ -z $IP ];thenecho ''echo '獲取工程的IP為空,終止程序'echo ' 'echo '**************************************解析參數(shù)校檢失敗*****************************************************************'exitfiif [ -z $shellPath ];thenecho ''echo '獲取工程的執(zhí)行腳本路徑為空,終止程序'echo ' 'echo '**************************************解析參數(shù)校檢失敗*****************************************************************'exitfiif [ '$param3' == 'log' ]&&[ -z $logPath ];thenecho ''echo '查看日志,獲取工程的日志路徑為空,終止程序'echo ' 'echo '**************************************解析參數(shù)校檢失敗*****************************************************************'exitfiecho ' '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 $IPdoif [ $param3 == 'update' ];thenecho ' '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 fiecho ' 'echo '====================================升級(update)操作執(zhí)行結(jié)束==========================================================='elif [ $param3 == 'start' ];thenecho ' 'echo '====================================啟動(dòng)(start)操作執(zhí)行開始============================================================'echo ' 'remotecall if [ $? -ne 0 ];then echo '機(jī)器IP為 '$ip '執(zhí)行啟動(dòng)腳本失敗' else echo '機(jī)器IP為 '$ip '執(zhí)行啟動(dòng)腳本成功' fiecho ' 'echo '====================================啟動(dòng)(start)操作執(zhí)行結(jié)束============================================================'elif [ $param3 == 'rollbak' ];thenecho ' 'echo '===================================回滾(rollbak)操作執(zhí)行開始============================================================'echo ' 'remotecall if [ $? -ne 0 ];then echo '機(jī)器IP為 '$ip '執(zhí)行回滾腳本失敗' else echo '機(jī)器IP為 '$ip '執(zhí)行回滾腳本成功' fiecho ' 'echo '====================================回滾(rollbak)操作執(zhí)行結(jié)束============================================================'elif [ $param3 == 'stop' ];thenecho ' 'echo '===================================停止(stop)操作執(zhí)行開始============================================================'echo ' 'remotecall if [ $? -ne 0 ];then echo '機(jī)器IP為 '$ip '執(zhí)行停止腳本失敗' else echo '機(jī)器IP為 '$ip '執(zhí)行停止腳本成功' fiecho ' 'echo '====================================停止(stop)操作執(zhí)行結(jié)束============================================================'elif [ $param3 == 'log' ];thenecho ' 'echo '===================================查看日志(log)操作執(zhí)行開始============================================================'echo ' ' looklog if [ $? -ne 0 ];then echo '機(jī)器IP為 '$ip '執(zhí)行日志查看腳本失敗' else echo '機(jī)器IP為 '$ip '執(zhí)行日志查看腳本成功' fiecho ' 'echo '====================================查看日志(log)操作執(zhí)行結(jié)束============================================================'elif [ $param3 == 'restart' ];thenecho ' 'echo '======================================重啟(restart)操作執(zhí)行開始=========================================================='echo ' 'remotecall if [ $? -ne 0 ];then echo '機(jī)器IP為 '$ip '執(zhí)行重啟腳本失敗' else echo '機(jī)器IP為 '$ip '執(zhí)行重啟腳本成功' fiecho ' 'echo '=====================================重啟(restart)操作執(zhí)行結(jié)束============================================================'fidone#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++優(yōu)化版本入口
#!/bin/bash#+++++++++++++++++腳本說明++++++++++++++++++++++++++++++help=$1if [ '${help^^}' == '-HELP' ];thenecho '******************************遠(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(啟動(dòng)),stop(停止),restart(重啟)**'echo '**參數(shù)3 配置屬性中對應(yīng)工程機(jī)器的標(biāo)識:支持 ddp-server1,ddp-server2,ddp-server3...,當(dāng)為 all 的時(shí)候取全部[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 啟動(dòng)所有的工程***************************************'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個(gè)參數(shù)的語法,只支持以下語法查詢 參數(shù)3 支持的個(gè)數(shù)**********************************************'echo '**************查詢某個(gè)工程對應(yīng)的機(jī)器的標(biāo)識如 deploy.sh 參數(shù)1 listserver 查看對應(yīng)的機(jī)器參數(shù)個(gè)數(shù)***********************'echo ' 'echo '******************************遠(yuǎn)程發(fā)布腳本說明***********************************************************************'echo ' 'exitfi#+++++++++++++++++腳本說明++++++++++++++++++++++++++++++#+++++++++++++++++參數(shù)定義部分++++++++++++++++++++++++++#參數(shù)一表示 工程名稱param1=$1#參數(shù)二表示 配置文件中對應(yīng)的屬性,規(guī)則 1,2,3 分別取對應(yīng)的參數(shù),當(dāng)為 all的時(shí)候取全部[1,2,3]的屬性param2=$2#參數(shù)三表示 執(zhí)行的的腳本支持update(版本升級),rollbak(版本回滾),log(查看版本日志),start(啟動(dòng)),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 fifiecho '**************************************開始校檢傳入?yún)?shù)*******************************************************************'if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;thenecho ' ' echo '參數(shù)不能為空如:(deploy.sh 參數(shù)1 參數(shù)2 參數(shù)3) 按照空格分隔'echo ' 'echo '**************************************傳入?yún)?shù)校檢失敗*******************************************************************'exitfiif [ '$param2' != 'update' ]&&[ '$param2' != 'restart' ]&&[ '$param2' != 'stop' ]&&[ '$param2' != 'start' ]&&[ '$param2' != 'rollbak' ]&&[ '$param2' != 'log' ];thenecho ' ' echo '參數(shù)2只支持: update,restart,start,stop,rollbak,log'echo ' 'echo '**************************************傳入?yún)?shù)校檢失敗*******************************************************************'exitelse if [ '$param2' == 'log' ]&&[ '$param3' == 'all' ];thenecho ' ' echo '查看系統(tǒng)日志只支持單個(gè)操作如:(deploy.sh ddp-server log ddp-server1),參數(shù)3不支持all'echo ' 'echo '**************************************傳入?yún)?shù)校檢失敗*******************************************************************' exit fifiecho ' '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}') fiecho '獲取工程名稱為: '$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í)行腳本路徑為: '$shellPathecho ' 'echo '**************************************解析config.properties配置文件結(jié)束***********************************************'#+++++++++++++++++傳遞參數(shù)校檢以及配置文件解析部分++++++++++#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++echo ' 'echo '**************************************開始校檢解析參數(shù)*****************************************************************'if [ -z '$IP' ];thenecho ''echo '獲取工程的IP為空,終止程序'echo ' 'echo '**************************************解析參數(shù)校檢失敗*****************************************************************'exitfiif [ -z $shellPath ];thenecho ''echo '獲取工程的執(zhí)行腳本路徑為空,終止程序'echo ' 'echo '**************************************解析參數(shù)校檢失敗*****************************************************************'exitfiif [ '$param2' == 'log' ]&&[ -z $logPath ];thenecho ''echo '查看日志,獲取工程的日志路徑為空,終止程序'echo ' 'echo '**************************************解析參數(shù)校檢失敗*****************************************************************'exitfiecho ' 'echo '**************************************解析參數(shù)校檢成功*****************************************************************'#將變量傳遞到子腳本export updatepathexport packageNameexport userNameexport shellPathexport param2export param1export logPathfor ip in $IPdoexport ipif [ $param2 == 'update' ];then#執(zhí)行更新腳本sh update.shelif [ $param2 == 'start' ];then#執(zhí)行啟動(dòng)腳本sh start.shelif [ $param2 == 'rollbak' ];then#執(zhí)行回滾腳本sh rollbak.shelif [ $param2 == 'stop' ];then#執(zhí)行停止腳本sh stop.shelif [ $param2 == 'log' ];then#執(zhí)行日志查看sh log.shelif [ $param2 == 'restart' ];then#執(zhí)行重啟腳本sh restart.shfidone#+++++++++++++++++解析參數(shù)驗(yàn)證,以及執(zhí)行調(diào)度部分++++++++++++總結(jié)以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
標(biāo)簽:
Linux
相關(guān)文章:
排行榜

網(wǎng)公網(wǎng)安備