shell脚本如何启动springboot项目

来自:网络
时间:2023-07-23
阅读:
目录

shell脚本启动springboot项目

Spring Boot项目启动

我们知道打包好的Spring Boot项目这样启动

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

在linux中,常常使用nohup后台启动其他程序,Spring Boot项目使用nohup启动如下

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

如果使用上面命令启动,注意这时候远程terminal要主动exit退出,不这样做系统可能会杀掉上面启动的进程

由于开发需要,需要频繁地更新项目,写了两个shell脚本启动和关闭项目

  • 启动项目脚本 start.sh
#!/bin/bash
cd project  # ccd2002-0.0.1-SNAPSHOT.jar所在目录
nohup java -Xms128m -Xmx256m -jar -Dfile.encoding=utf-8 ccd2002-0.0.1-SNAPSHOT.jar &
  • 关闭项目脚本
#!/bin/bash
sudo kill $(ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}')

上面脚本使用ps命令查到ccd2002项目的信息,然后使用awk过滤信息获取项目pid,最后使用kill杀掉项目。

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

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

命令执行结果截图如下

shell脚本如何启动springboot项目

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

命令取出上图中指出的pid

shell脚本如何启动springboot项目

awk命令对ps结果进行处理,awk 'NR==2{print $2}'中的NR=2表示ps结果的第二行,$2表示行中的第二个元素

springboot项目linux简单的启动、停止、更新脚本sh

1.启动脚本

#!/bin/bash
#获取路径
basepath=$(cd $(dirname $0); pwd)
echo  "xxxxxx  启动开始............."
nohup java -jar  $basepath/xxxxxx.jar  --spring.profiles.active=prd >/dev/null 2>&1&
echo  "xxxxxx  启动成功............."

2.停止脚本

#!/bin/bash
echo "xxxxxx    停止开始......."
ID=`ps -ef | grep "xxxxxx.jar" | grep -v "grep" | awk '{print $2}'`
echo $ID
for id in $ID
do
kill -9 $id
echo "killed $id"
done
sleep 5s
echo "xxxxxx    停止成功......."

3.版本升级脚本

#!/bin/bash
basepath=$(cd $(dirname $0); pwd)
echo "############################执行update.sh开始###########################"
echo "基础路径:$basepath"
echo "远程传递参数为:" ${1}
if [ -z ${1} ];then 
echo "工程名称参数传递为空,更新失败"
else
if [ -f "$basepath/../../deploy/${1}.jar" ];then
        echo "开始备份工程包"
        cp $basepath/${1}.jar  $basepath/../appBak/${1}.jar_$(date '+%Y-%m-%d-%H:%M:%S')
        echo "工程包备份成功"
        #停止应用    
        sh $basepath/stop.sh
        #开始删除老的工程包
        if [ -f "$basepath/${1}.jar" ];then
        rm $basepath/${1}.jar
        fi
        echo "开始更新工程包"
     mv $basepath/../../deploy/${1}.jar $basepath/${1}.jar
       if [ $? -eq 0 ];then
        #启动应用
        sh $basepath/start.sh
        else
          echo "工程包移动失败"
        fi
else
 echo "升级包不存在"
fi
fi
echo "############################执行update.sh结束###########################"

4、回滚脚本

#!/bin/bash
basepath=$(cd $(dirname $0); pwd)
echo "基础路径:$basepath"
packageName=$(cd ${basepath}'/../appBak'; ls -lrlt |grep $(date '+%Y-%m-%d') |head -n 1 |awk '{print $9}' )
echo "获取回滚包名称为:"$packageName
if [ -z $packageName ];then
   echo "回滚 "$1" 包不存在,回滚失败"
else
echo "远程传递参数为:"${1}
if [ -z ${1} ];then
echo "工程名称参数为空,回滚失败"
else
#将备份包还原在启动
cp $basepath/../appBak/$packageName $basepath/../../deploy/${1}.jar
if [ -f "$basepath/../../deploy/"${1}".jar" ];then
        #停止应用    
        sh $basepath/stop.sh
        if [ -f "$basepath/"${1}".jar" ];then
        #开始删除老的工程包
        rm $basepath/${1}.jar
        fi
        mv $basepath/../../deploy/${1}.jar $basepath/${1}.jar
        if [ $? -eq 0 ];then
         echo "回滚还原包成功"
        #启动应用
        sh $basepath/start.sh
        else
          echo  "工程包还原失败"
        fi
else
 echo "还原包不存在"
fi
fi
fi

5.远程发布脚本(前提配置免密登录)

#!/bin/bash
echo "******************************远程发布脚本***********************************************************"
echo " "
echo "********脚本参数 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-ext、********"
echo "********ddp-server-task、dmsp-gateway 脚本类型:支持 update(更新脚本)/rollbak(回滚脚本)***************"
echo "*******将上述工程名对应的jar包放在 /opt/apps/deploy目录下********************************************"
echo "********在config.properties配置文件中,配置工程对应的服务器IP多台机器则以逗号(,)分隔。***************"
echo "********如 ddp-server=192.168.1.2,192.178.3.4 的形式配置工程对应的机器*******************************"
echo "*************执行脚本的方式如  sh deploy.sh ddp-server update  升级**********************************"
echo "*************执行脚本的方式如  sh deploy.sh ddp-server rollbak 回滚**********************************"
echo "  "
echo "******************************远程发布脚本***********************************************************"
echo "     "
echo "##############################开始校检参数############################################################"
if [ -z $1 ]||[ -z $2 ];then
echo " "
echo '参数不能为空,如: sh deploy.sh ddp-server update'
echo ""
echo "##############################参数校检失败############################################################"
else
echo " "
echo "##############################参数校检成功############################################################"
echo "    "
echo "#############################开始校检配置文件#########################################################"
echo "  "
path="/opt/apps/deploy"
echo "远程发布包的路径为:" $path
shellpath=""
if [ $1 == "ddp-server" ];then
 shellpath="/opt/apps/ddp/app"
elif [ $1 == "ddp-server-idxs" ];then
 shellpath="/opt/apps/ddp-idxs/app"
elif [ $1 == "ddp-server-mdxs" ]; then
 shellpath="/opt/apps/ddp-mdxs/app"
elif [ $1 == "ddp-server-ext" ]; then
  shellpath="/opt/apps/ddp-ext/app"
elif [ $1 == "ddp-server-task" ];then
  shellpath="/opt/apps/ddp-task/app"
elif [ $1 == "dmsp-gateway" ];then
  shellpath="/opt/apps/dmsp-gateway/app"
fi 
echo "远程脚本路径为:"$shellpath
#工程模块名称
modle=$(cat config.properties |grep  $1"=" |awk -F '=' '{print $1}')
echo "工程名称为:"$modle
ips=$(cat config.properties |grep  $1"="|awk -F '=' '{print $2}')
echo 目标ip为:$ips
echo " "
if [ -z $modle ];then
echo "###########工程在配置文件(config.properties)中不存在,脚本执行终止#####################################"
elif [ -z $ips ]; then
echo "#############工程对应的目标机器ip在配置文件(config.properties)中不存在,脚本执行终止##################"
elif [ -z $shellpath ];then
echo "############################"$1"不支持远程操作,脚本执行终止##########################################"
elif [ $2 != 'update' ] && [ $2 != 'rollbak' ];then
echo "############################远程操作仅支持 update 或 rollbak,脚本执行终止############################"
else
echo "###################配置文件校检通过,开始更新或回滚操作###############################################"
OLD_IFS="$IFS"
IFS=","
#如下会自动分隔
arr=($ips)
#恢复原来的分隔符
IFS="$OLD_IFS"
#遍历数组
for ip in ${arr[@]}
do
 if [ $2 == 'update' ];then
  echo "     "
  echo "====================================================================================================="
  echo "++++++++++++++++++++++++++++++++++++"${ip}"开始执行更新操作++++++++++++++++++++++++++++++++"
  echo "     "
  echo "开始远程拷贝文件" ${modle}".jar 到机器ip为: "${ip} ${path}"的目录下"
   scp  -o ConnectTimeout=10 ${path}/${modle}.jar phfund@${ip}:${path}
  if [ $? -ne 0 ];then
      echo "远程拷贝"${modle}".jar 到 " ${ip} " 失败,本次更新失败"
      echo "  "
     echo "======================================================================================================"
  else
     echo "远程拷贝"  ${modle}".jar到" $ip "成功"
      ssh  -o ConnectTimeout=10  ${ip}   ' sh ' $shellpath'/'$2'.sh ' $1 
      if [ $? -eq 0 ];then
      echo "     "
      echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"更新成功+++++++++++++++++++++++++++"
      echo "================================================================================================="
      else
       echo "     "
       echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"更新失败++++++++++++++++++++++++++"   
       echo "================================================================================================"
      fi
   fi
elif [ $2=='rollbak' ];then
      echo "     "
     echo "==================================================================================================="   
     echo "+++++++++++++++++++++++++++++++++++++++++++++++++++"${ip}"开始执行回滚操作++++++++++++++"
     echo "     "
     ssh  -o ConnectTimeout=10 ${ip}   ' sh '${shellpath}'/'$2'.sh ' $1 
      if [ $? -ne 0 ];then
        echo "     "
        echo "+++++++++++++++++++++++++++++++++++++++++++++++"${ip}"回滚操作失败++++++++++++++++++++"    
         echo "===============================================================================================" 
     else
        echo "     "
        echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"回滚操作成功++++++++++++++++++++++"   
        echo "==============================================================================================="
        fi
fi
done
fi
fi
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
echo "******************************远程发布脚本说明***********************************************************************"
echo " "
echo "******************************脚本参数*******************************************************************************"
echo "**参数1 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
echo "**参数2 配置属性中对应工程的标识:支持 1,2,3...,当为 all 的时候取全部[1,2,3...]所对应的属性**************************"
echo "**参数3 执行的的脚本:支持 update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)**"
echo "******************************脚本参数*******************************************************************************"
echo " "
echo "******************************升级版本的工程包放在 /opt/apps/deploy目录下********************************************"
echo "******************************在/opt/apps/ssh/config.properties配置文件中配置属性************************************"
echo "******************************工程ip如: ddp-server.1=ip**************************************************************"
echo "******************************工程日志路径如: ddp-server.logPath=/opt/apps/ddp/log/**********************************"
echo "******************************工程执行脚本路径如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
echo "  "
echo "*******************************执行方式(deploy.sh 参数1 参数2 参数3)*************************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all update  升级所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all rollbak 回滚所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all stop    停止所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all start   启动所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all restart 重启所有的工程***************************************"
echo " "
echo "*************日志查看不支持all,只能够单独选择某一台日志查看**********************************************************"
echo "**************执行脚本的方式如 deploy.sh ddp-server 1 log 查看某台机器的工程日志*************************************"
echo "  "
echo "******************************远程发布脚本说明***********************************************************************"
echo "  "
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#参数一表示 工程名称
param1=$1
#参数二表示 配置文件中对应的属性,规则 1,2,3 分别取对应的参数,当为 all的时候取全部[1,2,3]的属性
param2=$2
#参数三表示 执行的的脚本支持update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)
param3=$3
#工程包名称
packageName=$param1".jar"
#升级包路径
updatepath="/opt/apps/deploy"
#远程机器用户
userName="phfund"
#ip地址
IP=""
#日志路径
logPath=""
#脚本路径
shellPath=""
#config.properties配置文件路径
configPath="/opt/apps/ssh"
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#+++++++++++++++++传递参数校检以及配置文件解析校检部分++++++++++
echo "**************************************开始校检传入参数*******************************************************************"
if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
echo " " 
echo "参数不能为空如:(deploy.sh 参数1 参数2 参数3) 按照空格分隔"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
fi
if [ "$param3" != "update" ]&&[ "$param3" != "restart" ]&&[ "$param3" != "stop" ]&&[ "$param3" != "start" ]&&[ "$param3" != "rollbak" ]&&[ "$param3" != "log" ];then
echo " " 
echo "参数3只支持: update,restart,start,stop,rollbak,log"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
else
   if [ "$param3" == "log" ]&&[ "$param2" == "all" ];then
echo " " 
echo "查看系统日志只支持单个操作如:(deploy.sh ddp-server 1 log),参数2不支持all"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"   
    exit
   fi
fi
echo " "
echo "**************************************传入参数校检成功*******************************************************************"
echo " "
echo "*****************************************开始解析config.properties配置文件***********************************************" 
echo " "
if [ "$param2" == "all" ];then
  IP=$(cd ${configPath}; cat ./config.properties|grep ${param1}'\.'|grep -v ${param1}'\.logPath'|grep -v ${param1}'\.shellPath'|awk -F '=' '{print $2}')
else
  IP=$(cd ${configPath};cat ./config.properties|grep ${param1}'\.'${param2}|awk -F '=' '{print $2}') 
fi
echo "获取工程名称为: "$param1 " IP地址: "$IP
 logPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.logPath'|awk -F '=' '{print $2}')
echo "获取工程日志路径为: "$logPath 
 shellPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.shellPath'|awk -F '=' '{print $2}')
echo "获取工程执行脚本路径为: "$shellPath
echo " "
echo "**************************************解析config.properties配置文件结束***********************************************"
#+++++++++++++++++传递参数校检以及配置文件解析部分++++++++++
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++
echo " "
echo "**************************************开始校检解析参数*****************************************************************"
if [ -z $IP ];then
echo ""
echo "获取工程的IP为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ -z $shellPath ];then
echo ""
echo "获取工程的执行脚本路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ "$param3" == "log" ]&&[ -z $logPath ];then
echo ""
echo "查看日志,获取工程的日志路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
echo " "
echo "**************************************解析参数校检成功*****************************************************************"
#调度公共方法
function remotecall(){  
    ssh  -o ConnectTimeout=10  ${ip}   'sh ' $shellPath'/'$param3'.sh ' $param1 
}  
#查看日志方法
function looklog(){
   ssh  -o ConnectTimeout=10  ${ip}   'sh ' $shellPath'/'$param3'.sh ' $param1 $logPath
}
#远程拷贝公共方法
function scpcall(){
    scp  -o ConnectTimeout=10 ${updatepath}/${packageName} ${userName}@${ip}:${updatepath}
}
for ip in $IP
do
if [ $param3 == 'update' ];then
echo " "
echo "====================================升级(update)操作执行开始==========================================================="
echo " "
   scpcall
 if [ $? -ne 0 ];then
   echo "远程拷贝"${packageName}" 到IP为" ${ip} "机器的 "${updatepath}" 目录下失败,本次升级失败" 
 else
   echo "远程拷贝"${packageName}" 到IP为" $ip "机器的 "${updatepath}" 目录下成功,开始执行更新脚本"
   echo " "
   remotecall
   echo " "
   if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行更新脚本失败"
   else
     echo "机器IP为 "$ip "执行更新脚本成功"
   fi 
 fi
echo " "
echo "====================================升级(update)操作执行结束==========================================================="
elif [ $param3 == 'start' ];then
echo " "
echo "====================================启动(start)操作执行开始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行启动脚本失败"
   else
     echo "机器IP为 "$ip "执行启动脚本成功"
   fi
echo " "
echo "====================================启动(start)操作执行结束============================================================"
elif [ $param3 == 'rollbak' ];then
echo " "
echo "===================================回滚(rollbak)操作执行开始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行回滚脚本失败"
   else
     echo "机器IP为 "$ip "执行回滚脚本成功"
   fi
echo " "
echo "====================================回滚(rollbak)操作执行结束============================================================"
elif [ $param3 == 'stop' ];then
echo " "
echo "===================================停止(stop)操作执行开始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行停止脚本失败"
   else
     echo "机器IP为 "$ip "执行停止脚本成功"
   fi
echo " "
echo "====================================停止(stop)操作执行结束============================================================"
elif [ $param3 == 'log' ];then
echo " "
echo "===================================查看日志(log)操作执行开始============================================================"
echo " "
 looklog
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行日志查看脚本失败"
   else
     echo "机器IP为 "$ip "执行日志查看脚本成功"
   fi
echo " "
echo "====================================查看日志(log)操作执行结束============================================================"
elif [ $param3 == 'restart' ];then
echo " "
echo "======================================重启(restart)操作执行开始=========================================================="
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行重启脚本失败"
   else
     echo "机器IP为 "$ip "执行重启脚本成功"
   fi
echo " "
echo "=====================================重启(restart)操作执行结束============================================================"
fi
done
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++

优化版本入口

#!/bin/bash
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
help=$1
if [ "${help^^}" == "-HELP" ];then
echo "******************************远程发布脚本说明***********************************************************************"
echo " "
echo "******************************脚本参数*******************************************************************************"
echo "**参数1 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
echo "**参数2 执行的的脚本:支持 update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)**"
echo "**参数3 配置属性中对应工程机器的标识:支持 ddp-server1,ddp-server2,ddp-server3...,当为 all 的时候取全部[ddp-server1,*"
echo "***************ddp-server2,ddp-server3.]所对应的属性*****************************************************************"
echo "******************************脚本参数*******************************************************************************"
echo " "
echo "******************************升级版本的工程包放在 /opt/apps/deploy目录下********************************************"
echo "******************************在/opt/apps/ssh/config.properties配置文件中配置属性************************************"
echo "******************************工程ip如: ddp-server.1=ip**************************************************************"
echo "******************************工程日志路径如: ddp-server.logPath=/opt/apps/ddp/log/**********************************"
echo "******************************工程执行脚本路径如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
echo "  "
echo "*******************************执行方式(deploy.sh 参数1 参数2 参数3)*************************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  update all 升级所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  rollbak all回滚所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  stop all   停止所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  start all  启动所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server restart all 重启所有的工程***************************************"
echo " "
echo "*************日志查看不支持all,只能够单独选择某一台日志查看**********************************************************"
echo "**************执行脚本的方式如 deploy.sh ddp-server log ddp-server1 查看某台机器的工程日志***************************"
echo " "
echo "*************脚本对应2个参数的语法,只支持以下语法查询 参数3 支持的个数**********************************************"
echo "**************查询某个工程对应的机器的标识如 deploy.sh 参数1 listserver 查看对应的机器参数个数***********************"
echo "  "
echo "******************************远程发布脚本说明***********************************************************************"
echo "  "
exit
fi
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#参数一表示 工程名称
param1=$1
#参数二表示 配置文件中对应的属性,规则 1,2,3 分别取对应的参数,当为 all的时候取全部[1,2,3]的属性
param2=$2
#参数三表示 执行的的脚本支持update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)
param3=$3
#工程包名称
packageName=$param1".jar"
#升级包路径
updatepath="/opt/apps/deploy"
#远程机器用户
userName="phfund"
#ip地址
IP=""
#日志路径
logPath=""
#脚本路径
shellPath=""
#config.properties配置文件路径
configPath="/opt/apps/ssh"
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#+++++++++++++++++传递参数校检以及配置文件解析校检部分++++++++++
if [ -z $param3 ]&&[ -n $param1 ] && [ -n $param2 ];then
 if [ "${param2^^}" == "LISTSERVER" ];then
  echo "**************************************获取工程所部署的机器(执行脚本参数3 可选的值)**************************************"
   list=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $1}')
   echo "工程对应机器名称(参数3)可选值:" $list
  echo ""
  echo "**************************************获取工程所部署的机器(执行脚本参数3 可选的值)**************************************"
  exit
 fi
fi
echo "**************************************开始校检传入参数*******************************************************************"
if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
echo " " 
echo "参数不能为空如:(deploy.sh 参数1 参数2 参数3) 按照空格分隔"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
fi
if [ "$param2" != "update" ]&&[ "$param2" != "restart" ]&&[ "$param2" != "stop" ]&&[ "$param2" != "start" ]&&[ "$param2" != "rollbak" ]&&[ "$param2" != "log" ];then
echo " " 
echo "参数2只支持: update,restart,start,stop,rollbak,log"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
else
   if [ "$param2" == "log" ]&&[ "$param3" == "all" ];then
echo " " 
echo "查看系统日志只支持单个操作如:(deploy.sh ddp-server log ddp-server1),参数3不支持all"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"   
    exit
   fi
fi
echo " "
echo "**************************************传入参数校检成功*******************************************************************"
echo " "
echo "*****************************************开始解析config.properties配置文件***********************************************" 
echo " "
if [ "$param3" == "all" ];then
  IP=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $2}')
else
  IP=$(cd ${configPath};cat ./config.properties|grep ${param3}"="|awk -F '=' '{print $2}') 
fi
echo "获取工程名称为: "$param1 " IP地址: "$IP
 logPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.logPath'|awk -F '=' '{print $2}')
echo "获取工程日志路径为: "$logPath 
 shellPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'\.shellPath'|awk -F '=' '{print $2}')
echo "获取工程执行脚本路径为: "$shellPath
echo " "
echo "**************************************解析config.properties配置文件结束***********************************************"
#+++++++++++++++++传递参数校检以及配置文件解析部分++++++++++
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++
echo " "
echo "**************************************开始校检解析参数*****************************************************************"
if [ -z "$IP" ];then
echo ""
echo "获取工程的IP为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ -z $shellPath ];then
echo ""
echo "获取工程的执行脚本路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ "$param2" == "log" ]&&[ -z $logPath ];then
echo ""
echo "查看日志,获取工程的日志路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
echo " "
echo "**************************************解析参数校检成功*****************************************************************"
#将变量传递到子脚本
export updatepath
export packageName
export userName
export shellPath
export param2
export param1
export logPath
for ip in $IP
do
export ip
if [ $param2 == 'update' ];then
#执行更新脚本
sh update.sh
elif [ $param2 == 'start' ];then
#执行启动脚本
sh start.sh
elif [ $param2 == 'rollbak' ];then
#执行回滚脚本
sh rollbak.sh
elif [ $param2 == 'stop' ];then
#执行停止脚本
sh stop.sh
elif [ $param2 == 'log' ];then
#执行日志查看
sh log.sh
elif [ $param2 == 'restart' ];then
#执行重启脚本
sh restart.sh
fi
done
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

返回顶部
顶部