当前位置:   article > 正文

linux shell优雅停止重启springboot微服务 (含完整shell脚本)_linux springboot shutdown shell

linux springboot shutdown shell

本篇文章不介绍如何配置和如何停止springboot的配置,网上有很多,可以搜一下。

原理是通过本地localhost的http请求停止相关服务。

#此命令是一整行,我为了方便显示进行换行了。
curl -H "Content-Type:application/json" -X POST 
http://127.0.0.1:24005/actuator/shutdown
#24005是你所在服务配置的端口
  • 1
  • 2
  • 3
  • 4

下面是springboot中yml如何配置,我们这里的配置原则是服务端口号减去1000

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    shutdown:
      enabled: true
  server:
    port: 24005
    address: 127.0.0.1
    servlet:
      context-path: /
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

/home/service/houhou目录下,创建的houhou.war
在jenkins打包时候可以加一个名字,我这里是 houhou.war_newbuild。如果存在这个包名,那么修改名字进行启动。

#修改包名的脚本,也就是更新houhou.war这个部署包
if [ -e houhou.war_newbuild ]; then
    #备份
    mv houhou.war "houhou.war_"`date "+%Y%m%d_%H%M%S"`
    mv houhou.war_newbuild houhou.war
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后查看这个服务有没有启动,如果启动了,结束她再自动那个已经更新过的houhou.war

pid=$(ps -ef | grep houhou.war | grep java | awk '{print $2}');
echo "$pid"
##如果不存在进程则启动
if [ ! -n "$pid" ]; then
    LOGFILE="./run.log"
    java -jar ./houhou.war >> "./${LOGFILE}" 2>&1 &
    echo "启动完成"
    ps -ef | grep houhou.war
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

还有一个就是启动这个shell脚本当前目录的包,那么要切换到当前目录。

#切换到当前目录的shell脚本
DIR="$( cd "$( dirname "$0"  )" && pwd )"
cd "${DIR}"
  • 1
  • 2
  • 3

完整的脚本实现,如下

#!/bin/bash

#停止的端口
END_PORT=28008
#包名
APP_NAME=memeda.war
BACKUP_NAME="${APP_NAME}_"`date "+%Y%m%d_%H%M%S"`
APP_NAME_NEWBUILD=${APP_NAME}_newbuild

echo "${APP_NAME}"
echo "${END_PORT}"

#优雅的shutdown,下面的两行是一条命令
curl -H "Content-Type:application/json" -X POST http://127.0.0.1:${END_PORT}/actuator/shutdown
#上面的两行是一条命令

#进入目标目录
DIR="$( cd "$( dirname "$-1"  )" && pwd )"
cd '${DIR}'

#重命名启动war包
if [ -e ${APP_NAME_NEWBUILD} ]; then
    #备份
    if [ -e ${APP_NAME} ]; then
       mv ./${APP_NAME} ./${BACKUP_NAME}   
    fi
    mv ./${APP_NAME_NEWBUILD} ./${APP_NAME}
fi

#启动项目
bash ${DIR}/start.sh
echo '启动完成'

  • 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

实践证明,这种方法其实有时候是行不通的。只能说理论上停掉服务,其实没有停掉。在测试我的接口时候,经常会遇到这种情况,服务还在。
现在转成了直接kill -9,切记要注意权限问题和进程pid的选择。关于kill -9 的方法干掉进程,我前面的博客有提到。欢迎访问谢谢!

水平原因可能存在错误,希望指正 chenrui@marsdl.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/745514?site
推荐阅读
相关标签
  

闽ICP备14008679号