springboot服务优雅关机脚本

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

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

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

#!/bin/bash -ejava -jar pay-server.jar --spring.profiles.active=prd > pafa.log 2>&1 &

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

#!/bin/bash -eps -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请求就可以优雅的停机,感觉还是没有脚本来的直接。

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

#!/bin/bash -eps -ef | grep pay-server.jar | grep -v grepif [$? -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导入的命令的话,就要写上全路径,因为在系统启动的时候,定时任务不会去提前加载环境变量。

往期精彩

01 漫谈发版哪些事,好课程推荐

02 Linux的常用最危险的命令

03 精讲Spring Boot—入门+进阶+实例

04 优秀的Java程序员必须了解的GC哪些

05 互联网支付系统整体架构详解

关注我

每天进步一点点

喜欢!在看 ☟

本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

springboot服务优雅关机脚本 - HelloWorld