zoukankan      html  css  js  c++  java
  • 【springboot】之利用shell脚本优雅启动,关闭springboot服务

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

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

    1、使用http shutdown

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

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

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

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

    #!/bin/sh
    ## java env
    export JAVA_HOME=/usr/local/jdk/jdk1.8.0_101
    export JRE_HOME=$JAVA_HOME/jre
    
    API_NAME=api
    JAR_NAME=$API_NAME.jar
    #PID  代表是PID文件
    PID=$API_NAME.pid
    
    #使用说明,用来提示输入参数
    usage() {
        echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
        exit 1
    }
    
    #检查程序是否在运行
    is_exist(){
      pid=`ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}' `
      #如果不存在返回1,存在返回0     
      if [ -z "${pid}" ]; then
       return 1
      else
        return 0
      fi
    }
    
    #启动方法
    start(){
      is_exist
      if [ $? -eq "0" ]; then 
        echo ">>> ${JAR_NAME} is already running PID=${pid} <<<" 
      else 
        nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
        echo $! > $PID
        echo ">>> start $JAR_NAME successed PID=$! <<<" 
       fi
      }
    
    #停止方法
    stop(){
      #is_exist
      pidf=$(cat $PID)
      #echo "$pidf"  
      echo ">>> api PID = $pidf begin kill $pidf <<<"
      kill $pidf
      rm -rf $PID
      sleep 2
      is_exist
      if [ $? -eq "0" ]; then 
        echo ">>> api 2 PID = $pid begin kill -9 $pid  <<<"
        kill -9  $pid
        sleep 2
        echo ">>> $JAR_NAME process stopped <<<"  
      else
        echo ">>> ${JAR_NAME} is not running <<<"
      fi  
    }
    
    #输出运行状态
    status(){
      is_exist
      if [ $? -eq "0" ]; then
        echo ">>> ${JAR_NAME} is running PID is ${pid} <<<"
      else
        echo ">>> ${JAR_NAME} is not running <<<"
      fi
    }
    
    #重启
    restart(){
      stop
      start
    }
    
    #根据输入参数,选择执行对应方法,不输入则执行使用说明
    case "$1" in
      "start")
        start
        ;;
      "stop")
        stop
        ;;
      "status")
        status
        ;;
      "restart")
        restart
        ;;
      *)
        usage
        ;;
    esac
    exit 0
  • 相关阅读:
    ASP.NET MVC 以Stream 下载文件
    ITextSharp 初次接触
    Easyui中tree组件实现搜索定位功能及展开节点定位
    lodop 打印控件的使用
    XML IList<T> TO DataSet TO DataTable 相互转换
    JSONToObejct 问题 part 1
    可以动态添加图片的轮播插件
    防止机器注册
    sqlServer 取每组的前几条数据
    log4net 动态设定日志文件名
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/8462929.html
Copyright © 2011-2022 走看看