赞
踩
本篇文章不介绍如何配置和如何停止springboot的配置,网上有很多,可以搜一下。
原理是通过本地localhost的http请求停止相关服务。
#此命令是一整行,我为了方便显示进行换行了。
curl -H "Content-Type:application/json" -X POST
http://127.0.0.1:24005/actuator/shutdown
#24005是你所在服务配置的端口
下面是springboot中yml如何配置,我们这里的配置原则是服务端口号减去1000
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
shutdown:
enabled: true
server:
port: 24005
address: 127.0.0.1
servlet:
context-path: /
在 /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
然后查看这个服务有没有启动,如果启动了,结束她再自动那个已经更新过的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
还有一个就是启动这个shell脚本当前目录的包,那么要切换到当前目录。
#切换到当前目录的shell脚本
DIR="$( cd "$( dirname "$0" )" && pwd )"
cd "${DIR}"
完整的脚本实现,如下
#!/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 '启动完成'
实践证明,这种方法其实有时候是行不通的。只能说理论上停掉服务,其实没有停掉。在测试我的接口时候,经常会遇到这种情况,服务还在。
现在转成了直接kill -9,切记要注意权限问题和进程pid的选择。关于kill -9 的方法干掉进程,我前面的博客有提到。欢迎访问谢谢!
水平原因可能存在错误,希望指正 chenrui@marsdl.com
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。