springbot开发api接口服务,生产环境中一般都是运行独立的jar,在部署过程中涉及到服务的优雅启动,关闭,

springboot官方文档给出的有两种方式,

1、使用http shutdown

2、注册为系统服务  https://docs.spring.io/spring-boot/docs/1.5.3.RELEASE/reference/htmlsingle/#deployment-service

第一种不方便,麻烦,需要配置各种安全策略,无法集成自动化部署工具

第二种需要建立软连接,可控性不够

尤其是集成自动化部署工具之后,使用shell脚本是不错的选择

  1. #!/bin/sh
  2. ## java env
  3. export JAVA_HOME=/usr/local/jdk/jdk1.8.0_101
  4. export JRE_HOME=$JAVA_HOME/jre
  5.  
  6. API_NAME=api
  7. JAR_NAME=$API_NAME\.jar
  8. #PID 代表是PID文件
  9. PID=$API_NAME\.pid
  10.  
  11. #使用说明,用来提示输入参数
  12. usage() {
  13. echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
  14. exit 1
  15. }
  16.  
  17. #检查程序是否在运行
  18. is_exist(){
  19. pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
  20. #如果不存在返回1,存在返回0
  21. if [ -z "${pid}" ]; then
  22. return 1
  23. else
  24. return 0
  25. fi
  26. }
  27.  
  28. #启动方法
  29. start(){
  30. is_exist
  31. if [ $? -eq "" ]; then
  32. echo ">>> ${JAR_NAME} is already running PID=${pid} <<<"
  33. else
  34. nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
  35. echo $! > $PID
  36. echo ">>> start $JAR_NAME successed PID=$! <<<"
  37. fi
  38. }
  39.  
  40. #停止方法
  41. stop(){
  42. #is_exist
  43. pidf=$(cat $PID)
  44. #echo "$pidf"
  45. echo ">>> api PID = $pidf begin kill $pidf <<<"
  46. kill $pidf
  47. rm -rf $PID
  48. sleep 2
  49. is_exist
  50. if [ $? -eq "" ]; then
  51. echo ">>> api 2 PID = $pid begin kill -9 $pid <<<"
  52. kill -9 $pid
  53. sleep 2
  54. echo ">>> $JAR_NAME process stopped <<<"
  55. else
  56. echo ">>> ${JAR_NAME} is not running <<<"
  57. fi
  58. }
  59.  
  60. #输出运行状态
  61. status(){
  62. is_exist
  63. if [ $? -eq "" ]; then
  64. echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
  65. else
  66. echo ">>> ${JAR_NAME} is not running <<<"
  67. fi
  68. }
  69.  
  70. #重启
  71. restart(){
  72. stop
  73. start
  74. }
  75.  
  76. #根据输入参数,选择执行对应方法,不输入则执行使用说明
  77. case "$1" in
  78. "start")
  79. start
  80. ;;
  81. "stop")
  82. stop
  83. ;;
  84. "status")
  85. status
  86. ;;
  87. "restart")
  88. restart
  89. ;;
  90. *)
  91. usage
  92. ;;
  93. esac
  94. exit 0

【springboot】之利用shell脚本优雅启动,关闭springboot服务的更多相关文章

  1. linux环境下编写shell脚本实现启动停止tomcat服务

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...

  2. 利用shell脚本个性化运行jar任务

    利用shell脚本可以个性化运行jar任务,废话不多说,直接上代码: #!/bin/bash APP_PATH=/root/bigdata/jars/data_migration_from_sqlse ...

  3. 利用shell脚本实现计划任务功能 V1.2

    2013.05.10  mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1. ...

  4. 利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下

    背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移 ...

  5. 利用shell脚本去备份幸运28源码搭建下载所指定的数据库

    #! /bin/bash幸运28源码搭建下载Q[115288oo99]logintool=/home/yx/server/mysql/mysql/bin/mysqldumptool=/home/yx/ ...

  6. 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...

  7. shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

  8. Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务

    文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...

  9. 启动/关闭oracle服务有三种方式

    启动oracle服务有三种方式: 1 从控制面板 2 使用MS-DOS命令 3 通过Oracle Administration Assistant for WindowsNT -通过控制面板启动ora ...

随机推荐

  1. 编译Thrift支持golang

    本文已经是很久以前的文章了,也不知道新版本thrift如何 Thrift是一个跨语言的服务部署框架,Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译 ...

  2. HihoCoder - 1801 :剪切字符串 (置换与逆序对)

    Sample Input 6 5 11 Sample Output 6 小Hi有一个长度为N的字符串,这个字符串每个位置上的字符两两不同.现在小Hi可以进行一种剪切操作: 选择任意一段连续的K个字符, ...

  3. this和super用法详解

    这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this ...

  4. c标签取数组中的对象值的2种方法

    1:循环遍历 <c:forEach items="${partsDeltailsList}" var="var" varStatus="vs&q ...

  5. sparkStreaming获取kafka数据(java版本)

    环境 spark-2.2.0 kafka_2.11-0.10.0.1 jdk1.8 配置好jdk,创建项目并将kafka和spark的jar包添加到项目中,除此之外还需要添加spark-streami ...

  6. 一天掌握python爬虫

    一天掌握python爬虫日记: (小爬虫,NO 我们是大蜘蛛 ) 数据抓取: requests:requests 的底层实现其实就是 urllib开源地址:https://github.com/ken ...

  7. PHP黑魔法(该篇文章转自:http://www.91ri.org/12634.html 目的是作为自己的笔记方便查找)

    那些年我们学过的PHP黑魔法 作者:Matrix_ling 序 这里必须得说一下==和===这俩货的重要性.==是比较运算,它不会去检查条件式的表达式的类型===是恒等,它会检查查表达式的值与类型是否 ...

  8. CH3B16 魔法珠

    题意 3B16 魔法珠 0x3B「数学知识」练习 描述 Freda和rainbow是超自然之界学校(Preternatural Kingdom University,简称PKU)魔法学院的学生.为了展 ...

  9. egg 官方文档之:框架扩展(Application、Context、Request、Response、Helper的访问方式及扩展)

    地址:https://eggjs.org/zh-cn/basics/extend.html Application app 对象指的是 Koa 的全局应用对象,全局只有一个,在应用启动时被创建. 访问 ...

  10. ASP.NET AJAX入门系列(6):UpdateProgress控件简单介绍

    在ASP.NET AJAX Beta2中,UpdateProgress控件已经从“增值”CTP中移到了ASP.NET AJAX核心中.以下两篇关于UpdateProgress的文章基本翻译自ASP.N ...