前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot服务优雅关机脚本

springboot服务优雅关机脚本

作者头像
BUG弄潮儿
发布2020-06-12 16:44:38
5980
发布2020-06-12 16:44:38
举报
文章被收录于专栏:JAVA乐园

阅读文本大概需要3分钟。

自从使用springboot开发项目后,服务很多时候都是打成jar包,然后通过 java -jar xx.jar 的方式来启动程序的。

比如下面这个脚本就是启动pay-server的脚本,加载 prd 配置文件,启动后在后台运行,将日志写在jar包目录下的 pafa.log 里

代码语言:javascript
复制
#!/bin/bash -e
java -jar pay-server.jar --spring.profiles.active=prd > pafa.log 2>&1 &

在网上能找到的关机脚本基本上都长成下面这个样

代码语言:javascript
复制
#!/bin/bash -e
ps -ef | grep pay-server.jar | grep -v grep | cut -c 9-15 | xargs kill -s 9

可以看到在命令最后加上了个参数 -s 9 在 kill 命令中 -9 是强制kill的意思,不管服务有没有正在运行的进程,它都会直接杀掉进场。

如果要做到优雅关机,只需要把后面的 -s 9 删掉就可以了,不带 -9 参数,它会等待进程运行完正在执行的任务,一直到没有正在运行的任务的时候再杀掉进程。

不过即使删除了- 9 参数,会存在进程杀死不掉的情况。当项目中用到了定时器,就有可能会出现杀不掉的现象,到时还是得要用上-9参数

当然 spring-boot 框架也自带了一个监听服务,如果服务在启动状态,发送一个POST请求就可以优雅的停机,感觉还是没有脚本来的直接。

服务器上一个服务宕机,宕机之后要重启一般都是人主动发现然后手动去启动的,下面这个脚本可以通过检测然后实现服务宕机后自动启动

代码语言:javascript
复制
#!/bin/bash -e
ps -ef | grep pay-server.jar | grep -v grep
if [$? -ne 0]
then
  echo "server is stoped! start..."
  java -jar pay-server.jar --spring.profiles.active=prd > pafa.log 2>&1 &
else
  echo "server is running..."
fi

然后可以将这个脚本放在系统的定时任务里执行,关于定时任务的用法可以查看cron命令

注意:如果用定时任务时,在被执行的脚本里如果有通过export导入的命令的话,就要写上全路径,因为在系统启动的时候,定时任务不会去提前加载环境变量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档