shell脚本实战-启动停止服务

先说一下这个脚本的由来吧,之前刚开始接触spring-cloud项目,跌跌撞撞摸索了很多,也学到很多,从刚开始的自己用maven打war包放在服务器上运行,然后一个个的使用命令 java -jar fms-cloud.war &来启动,说实话,费时费力,每次一点小改动就重新maven打包再用命令启动,所以需要什么来改变了。

然后我就寻找各种途径能减轻我的打包工作,之前也尝试过使用在windows上编写bat脚本 进行 maven打包,然后连接服务器,将war包上传到服务器,最后执行linux命令启动。其实这个操作也是可以的,但是感觉还是不得劲,因为我们这个系统的模块真的多,足足有18个,每次启动的服务还不一样,编写的bat脚本就太多了。

之后就直接去研究Jenkins,刚开始确实有点复杂,然后各种设置什么的,每个模块就要建立一个job,但是后来用着还是挺香的,之前打包都是我一个人来,现在是自己提交了代码之后用Jenkins构建一下就可以了,方便你我他。

也是在这个时期,应行内技术人员要求,需要一个shell脚本,用于统一启动和停止服务的操作,所有事情都是两手准备,如果Jenkins出了问题,那么就用shell脚本来操作,下面就是我疯狂百度了几天,最后自己写的一个操作脚本,希望能给你们带来帮助,废话不多说,看脚本,其中一些知识我也写在注释里面了

   #! /bin/bash
   # 上面是指此脚本使用/bin/bash来解释执行

   #这里一个start方法 下面在启动的时候会根据启动参数进行调用
   start(){
     # echo 为输出指令 可以将变量paths打印出来
     echo ${paths}
     # 获取参数赋给变量path 执行脚本的-p参数赋值然后获取到的
     path="${paths}"
     # 这里是判断 path 是否长度为0 如果是 给一个提示
     if [ -z $path ]; then
       echo "执行start命令请添加-p路径参数"
       return
     fi
     # 定义变量 A B 
     A="eureka"
     B="config"
     # 使用 local 定以一个局部变量 okCount 
     local okCount=0
     # 定以一个JARS变量 此变量的值为 通过命令 find 查找出来的值
     JARS="$(find $path -name \*0.0.1-SNAPSHOT.jar)"
     # 判断查找出来的数量是否大于0
     if [ ${#JARS} -gt 0 ]; then
          echo "判断是否有eureka的jar包"
          # 这里之所有要判断 因为这个项目需要先启动 eureka服务与config服务
          # 然后这里判断使用了 *$A* 通配符 
          if [[ $JARS == *$A* ]]; then
             echo "存在eureka服务,准备启动"
             nohup java -jar "$(find $path -name fms-cloud-eureka-0.0.1-SNAPSHOT.jar)" &
             echo "启动eureka服务完成"
             okCount=$(($okCount+1))
             echo "准备启动config服务" 
             sleep 10s
             nohup java -jar "$(find $path -name fms-cloud-config-0.0.1-SNAPSHOT.jar)" &
             echo "启动config服务完成"
             okCount=$(($okCount+1))
             sleep 10s
          fi
          echo "准备启动应用类服务"
          for jar in $JARS
             do
               if [[ $jar == *$A* ]]; then
                 echo "eureka服务已启动,这里不用启动"
               elif [[ $jar == *$B* ]]; then
                 echo "config服务已启动,这里不用启动"
               else 
                 echo "准备启动服务,服务路径为$jar"
                 nohup java -jar $jar &
                 okCount=$(($okCount+1))
               fi
             done
     else 
        echo "没有搜索到要启动的jar包,检查一下目录或者脚本"
     fi 
     echo ".............本次共启动:$okCount个服务..........."
   }
   
   #停止当前服务器的所有服务的一个stop方法
   stop(){
     local okCount=0
     # 这里依然是定以PID变量 并将通过命令执行后的结果赋值给它
     # 这个命令的作用为 列出所有进程中含有0.0.1-SNAPSHOT.jar的PID
     PID="$(ps -ef | grep 0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}')"
     # 判断PID是否大于0
     if [ ${#PID} -gt 0 ]; then
         echo "准备停止相应的资金系统服务"
         # 通过for循环 PID 变量
         for id in $PID
            do
              echo "停止成功pid: $id"       
              kill -9 $id
              okCount=$(($okCount+1))
            done
     else 
        echo "没有运行的资金服务"
     fi
     echo ".............本次共停止:$okCount个服务..........."
   }
   
   # 下面这段脚本的作用是刚开始启动的时候获取第一参数方便使用
   # 比如启动命令为: ./fms-cloud.sh start
   #case "$1" in 
   #   start)
   #        start
   #    ;;
   #   stop)
   #        stop
   #    ;;
   #    *)
   #        echo "第一个参数请输入: start|stop 该脚本只支持启动和关闭服务"
   #        exit
   #    ;;
   #esac
   
   # 后来为了能更加方便 因为每个版本所有的jar包都放在不同的路径下
   # 能将路径也通过参数控制就非常方便了(就是过场多)
   # 然后就百度到了这个getopts 是获取执行脚本的参数 -a -p 
   while getopts "a:p:" opt; do
     case $opt in
       p)
         # $OPTARG 通过这个就可以获得-p 后面的参数值
         paths=$OPTARG
         ;;
       a)
         option=$OPTARG
         if [ "$option" = "stop" ]; then
            stop  
         elif [ "$option" = "start" ]; then
            start
         else
            echo "-a 参数后面请输入:start|stop 该脚本只支持启动和关闭服务"      
         fi
         ;;
       \?)
         echo "执行该脚本请添加执行参数,执行参数-a:start|stop ,路径参数-p:/app/fms"
         echo "执行例子:./killAndRestar.sh -p /app/fms -a start"
         ;;
     esac
   done

上面就是最终的shell脚本,每个系统的启动要求都不一样,所以肯定脚本也有所不同,我这个就给大家参考参考,希望能帮到在开发路上负重前行的你们!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值