shell脚本启动springboot项目
Spring Boot项目启动
我们知道打包好的Spring Boot项目这样启动
1 | java -jar -Dfile.encoding=utf-8 test -0.0.1-SNAPSHOT.jar |
在linux中,常常使用nohup后台启动其他程序,Spring Boot项目使用nohup启动如下
1 | nohup java -jar -Dfile.encoding=utf- 8 test- 0.0 . 1 -SNAPSHOT.jar & |
如果使用上面命令启动,注意这时候远程terminal要主动exit退出,不这样做系统可能会杀掉上面启动的进程
由于开发需要,需要频繁地更新项目,写了两个shell脚本启动和关闭项目
- 启动项目脚本 start.sh
1 2 3 | #!/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 & |
- 关闭项目脚本
1 2 | #!/bin/bash sudo kill $( ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}' ) |
上面脚本使用ps命令查到ccd2002项目的信息,然后使用awk过滤信息获取项目pid,最后使用kill杀掉项目。
为了方便大家理解,下面分解
1 | sudo kill $( ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}' ) |
1 | ps -aux | grep 'ccd2002' |
命令执行结果截图如下
1 | 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.启动脚本
1 2 3 4 5 6 | #!/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.停止脚本
1 2 3 4 5 6 7 8 9 10 11 | #!/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.版本升级脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/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、回滚脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #!/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.远程发布脚本(前提配置免密登录)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #!/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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | #+++++++++++++++++脚本说明++++++++++++++++++++++++++++++ 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 #+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++ |
优化版本入口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | #!/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 #+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++ |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。