记一次生产发版时SpringBoot服务停用启用的问题

近期项目交接,接手了个SpringBoot项目。生产环境里,jar包是通过软链接做成linux服务来启动和停用。

然而,每次通过jenkins构建发版,项目构建完毕,还要手动再去重启服务。

听交接的同事说,可能是有一个钩子阻止服务停用了。

但是,我还是有点纳闷的,既然阻止了服务停用,按道理服务是还能再运行的,不可能构建完了服务就不可用,然后还要手动重启。

随后,我就开始了漫长的搜索……最后还是找到答案了。

步骤重现:

jenkins构建项目,执行脚本,停用服务

service crm-base stop

等了大约一分钟,窗口返回:

Unable to kill process [*****]

脚本执行完停止命令,随后执行启动命令

Unable to kill process [*****]

结果提示,服务正在运行。

Already running [*****]

然而,过了一会儿,去访问服务接口时,服务没有响应了。去查Eureka,微服务的状态此时是Down。

查服务的状态

service crm-base status

结果服务是没有启动的

Not running

显然,执行了服务停止的命令是有效的,感觉是一段时间内服务没有停下来而提示“Unable to kill process”。

接下来,在看到了SpringBoot的内嵌启动脚本源码,也印证了我的想法。

stop() {
  working_dir=$(dirname "$jarfile")
  pushd "$working_dir" > /dev/null
  [[ -f $pid_file ]] || { echoYellow "Not running (pidfile not found)"; return 0; }
  pid=$(cat "$pid_file")
  isRunning "$pid" || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; }
  do_stop "$pid" "$pid_file"
}

do_stop() {
  kill "$1" &> /dev/null || { echoRed "Unable to kill process $1"; return 1; }
  for i in $(seq 1 $STOP_WAIT_TIME); do
    isRunning "$1" || { echoGreen "Stopped [$1]"; rm -f "$2"; return 0; }
    [[ $i -eq STOP_WAIT_TIME/2 ]] && kill "$1" &> /dev/null
    sleep 1
  done
  echoRed "Unable to kill process $1";
  return 1;
}

可以看到,执行停止方法,本质是做kill操作。方法内有一个for循环,从1遍历到$STOP_WAIT_TIME,每次循环休眠1秒。提示“Unable to kill process”有两处,一处是for循环前,一次是for循环后。

至于$STOP_WAIT_TIME的默认值是多少,我们用Ctrl+F搜脚本

# Initialize stop wait time if not provided by the config file
[[ -z "$STOP_WAIT_TIME" ]] && STOP_WAIT_TIME="{{stopWaitTime:60}}"

可以看到,如果没有配置设置停止等待时间,默认就是60秒。正好印证了这一问题,服务停止约一分钟就提示杀进程失败,而实际上是进程还在处理,需要等待,并非是钩子的问题。

解决方法:

在jar包路径下加jar包同名的配置文件(e.g.:jar包文件名为crm-base.jar,则添加配置的文件名称为crm-base.conf),在配置中调整停止等待时间为120秒

STOP_WAIT_TIME=120

再次尝试用jenkins构建,服务终于能顺利重启了。

开始关闭服务
-------------
Stopped [28032]
-------------
开始启动服务
Started [24119]

所以,遇到问题的时候,百度是能短时间解决同类问题,但是找不到解决方法的,还是通过阅读源码最可靠。

参考文档:

[1]. https://github.com/spring-projects/spring-boot/issues/4369

[2]. https://github.com/spring-projects/spring-boot/issues/10159

[3]. https://www.jianshu.com/p/e21b95006371

[4]. https://www.jianshu.com/p/1414dc49d3a9

原文地址:https://www.cnblogs.com/linhui0705/p/10793541.html

时间: 2024-11-08 23:20:18

记一次生产发版时SpringBoot服务停用启用的问题的相关文章

项目开发和发版前的工作整理

最近做了一个项目,只负责前端部分,总结一下做项目中的坑. 首先是定位问题,我之前接到的通知是分析一下前端的工作量,进行一下人力安排排期,天真的我没有了解项目架构,仅仅是算了一下页面开发工作量和联调时间.事实证明,这个想法误导了我,后期吃亏了很多.在一个项目中,不管负责的内容多少,都要对项目的架构等有个整体的了解,对接多少项目组,什么样的架构,如何提测发版等对后期的开发很重要. 1.开发之前: 1.需求文档:接到需求之前需要仔细阅读,首先确定逻辑是否通,提出疑问.其次看一下处理流程,对需要对接的项

易助工资总额管控发版说明

一.开发背景 易助工资总额管控系统-2016已经正式发版.上市,满足人事薪酬管理的基础应用,基于平台开发,这意味着软件界面信息.数据结构.功能模块及数据处理算法均可随意修改,用户可根据自身实际情况自行组装.修改模块,甚至可开发新的应用系统.是目前市场上少见的一款务实.经济.高效.灵活的企业管理系统. 二.应用特征 1.功能完备,适用性强 提供系统维护.组织管理.人事管理.合同管理.薪资管理.报表管理.政策法规.保险福利.绩效管理.考勤管理.自助管理功能模块,提供报表与图形分析功能,方便用户使用与

AEAI HR人力资源管理系统v1.0版本发版说明

AEAI HR人力资源管理系统是数通畅联软件基于AEAI DP开发的开源Java Web系统,用来协助管理公司人力.薪酬等事务,AEAI HR人力资源系统包括一些核心的人力资源管理业务功能,如:薪酬管理.考勤管理.绩效管理等模块,能够满足企业人力资源信息化的基本要求. AEAI HR人力资源系统内部已预置演示账户,用于快速了解.掌握该系统. 产品下载地址:http://pan.baidu.com/s/111gia,欢迎大家下载使用,也可以加入数通畅联产品QQ技术群 299719834,一起参与讨

客户端单周发版下的多分支自动化管理与实践

背景 目前,互联网产品呈现出高频优化迭代的趋势,需求方希望尽早地看到结果,并给予及时反馈,所以技术团队需要用"小步快跑"的姿势来做产品,尽早地交付新版本.基于以上背景,美团客户端研发平台适时地推行了单周发版的迭代策略.单周版本迭代的优点可以概括为三个方面:更快地验证产品创意是否符合预期,更灵活地上线节奏,更早地修复线上Bug. 首先说一下美团平台的发版策略,主要变更点是由之前的每四周发一版改为每周都有发版.具体对比如下: (旧)三周迭代指的是2周开发+1周半测试,依赖固定的排期和测试时

阿里云移动研发平台 EMAS 助力银行业打造测试中台,提升发版效能

随着移动互联网的发展,手机银行凭借低成本.操作简单.不受时间空间约束等优势,正逐步替代传统的网银交易方式.越来越多的银行开始了“业务移动化”转型之路,“手机APP”已经成为企业价值传递和关系维护的关键纽带,客户争夺的主战场已转向移动端,事实上手机银行的用户比例早已超越了网银用户. 但是伴随着银行APP承载的业务需求日益增多.版本迭代速度不断加快,以“手工测试”为基础的测试体系,已很难满足业务对测试效率和质量的要求.APP 测试急需完成从“纯人工”到“人机协同”的范式转换. 一.银行 APP 的质

Unity 3D本地发布WebPlayer版时"Failed to download data file"解决方案

Unity 3D本地发布WebPlayer版时遇到提示:"Failed to download data file"(如上图),遇到这个问题就是指Web服务器并没有支持这种*.unity3d文件类型.需要做的是在Web服务器中添加MIME类型: 1.IIS 7 及以上版本: 在功能视图的IIS选项卡中: 双击打开MIME,选择"添加": .unity3d application/octet-stream 2.IIS6版本: 右击计算机名,选择属性,找到MIME类型,

AEAI ESB应用集成平台v3.5.3发版说明

发版说明 应用集成平台主要作为企业信息系统的"龙骨"来集成各业务系统,实现应用和数据的互联互通,一般称之为企业服务总线(Enterprise Service BUS,ESB).在数通畅联产品家族中应用集成平台命名为AEAI ESB. 本次发版的AEAI ESB_v3.5.3_20150615是数通畅联首次正式对外发布的AEAI ESB社区版(32位,限本机访问),该产品现已上传至网盘http://pan.baidu.com/s/1o6NvxXo,具体内容如下. 升级内容 新特性 1.

Database(Mysql)发版控制二

author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation & Configration 二.Advanced Usage of the Liquibase 三.Frequently Questions 二.Advanced Usage of the Liquibase 1.实际场景模拟 实际需求:需要把不同环境的不同分支的数据库变更合并,并按需求应用或回滚

AEAI DP开发平台v3.3.0_20150228发版说明

产品说明 AEAI DP应用开发平台专门用于开发MIS类的Java Web应用,也称Miscdp(Misc Develope Platform)综合应用开发平台. 本次发版产品AEAI DP开发平台v3.3.0_20150228是2014年发版的开发平台v3.2.0_20141016的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaidp,大家可以下载介质免费使用.详细内容可登入官网www.agileai.com了解,也可以加入我们的技术交流群29