springboot启动脚本start.sh和停止脚本 stop.sh的详细教程

 更新时间:2020年08月24日 09:40:48   作者:筏镜  
这篇文章主要介绍了springboot启动脚本start.sh和停止脚本 stop.sh的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

我们在项目中都会遇到项目打包,可以通过assembly对我们的项目进行打包。
针对打包构建jar包,本文不再叙述。具体可以参考maven插件assembly使用及springboot启动脚本start.sh和停止脚本 stop.sh

这里面已经有一个springboot 的启动脚本了,本文之所以还要写,是因为之前的脚本存在一个问题。关闭脚本的时候是通过kill -9 命令进行的,但其实我们项目中可能很多时候不能强制关闭的,在关闭之前需要做一些事情。比如将内存数据存到磁盘,dubbo清空zookeeper里面的固定节点 等等。

这里将启动脚本环境变量抽出来作为一个文件来使用:

setenv.sh

#!/usr/bin/env bash

PIDFILE=server.pid

if [ "$JAVA_HOME" != "" ]; then
 JAVA="$JAVA_HOME/bin/java"
 else
 JAVA=java
 fi

 JAVA_OPTS="-server -Xms32m -Xmx32m -Xmn24m -Xss256K -XX:MetaspaceSize=10m -DHADOOP_USER_NAME=root
   -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC \
   -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=10 \
   -XX:CMSInitiatingOccupancyFraction=60 -XX:+AggressiveOpts \
   -XX:+UseFastAccessorMethods \
	 -XX:+HeapDumpOnOutOfMemoryError \
	 -XX:HeapDumpPath=$base_dir/dump.dump
   -XX:+PrintGCDateStamps -XX:+PrintGCDetails \
   -Xloggc:$base_dir/gc.log"

start.sh 启动脚本:

#!/usr/bin/env bash
#source $(dirname $0)/../../env.sh
SERVERJAR="database-project-0.0.1-SNAPSHOT.jar"
base_dir=$(dirname $0)
cd ..
	
if [ -r "$base_dir/setenv.sh" ]; then
 . "$base_dir/setenv.sh"
fi

PID=$(ps -ef | grep "$SERVERJAR" | grep -v grep | awk '{ print $2}')

if [ -z "$PID" ]; then
 echo "Application has already stopped."
else
 echo "kill $PID"
 kill $PID && echo "Send stopping signal to server successful."


 #wait server stop

 LOOPS=0
 while(true)
 do
  PID=$(ps -ef | grep "$SERVERJAR" | grep -v grep | awk '{print $2}')
  if [ -z "$PID" ]; then
   echo "Stop server successful! Cost $LOOPS seconds."
   break;
  fi
  #judge time out

  if [ "$LOOPS" -gt 180 ]; then
   echo "$Stop server cost time over 180 seconds. Now force stop it."
   kill -9 $PID && echo "Force stop successful."
   break;
  else
   echo "Cost $LOOPS seconds."
  fi

  let LOOPS=LOOPS+1
  sleep 1
 done
fi

echo `pwd`
echo $SERVERJAR
echo $JAVA
echo $JAVA_OPTS
echo $JAVA_DEBUG_OPT

nohup $JAVA $JAVA_OPTS -jar $base_dir/../lib/$SERVERJAR > $base_dir/nohup.out 2>&1 < /dev/null &

if [ $? -eq 0 ]; then
 echo -n $! > "$PIDFILE"
 if [ $? -eq 0 ]; then
  sleep 1
  echo "STARTED"
 else
  echo "FAILED TO WRITE PID"
  exit 1
 fi
else
 echo "SERVER DID NOT START"
 exit 1
fi

stop.sh 脚本

#!/usr/bin/env bash
#source $(dirname $0)/../../env.sh
SERVERJAR="database-project-0.0.1-SNAPSHOT.jar"
base_dir=$(dirname $0)
cd ..
	
if [ -r "$base_dir/setenv.sh" ]; then
	 echo -e "come get data start"
 . "$base_dir/setenv.sh"
	echo -e "come get data end "
fi

PID=$(ps -ef | grep "$SERVERJAR" | grep -v grep | awk '{ print $2}')

if [ -z "$PID" ]; then
 echo "Application has already stopped."
else
 echo "kill $PID"
 kill $PID && echo "Send stopping signal to server successful."


 #wait server stop

 LOOPS=0
 while(true)
 do
  PID=$(ps -ef | grep "$SERVERJAR" | grep -v grep | awk '{print $2}')
  if [ -z "$PID" ]; then
   echo "Stop server successful! Cost $LOOPS seconds."
   break;
  fi
  #judge time out

  if [ "$LOOPS" -gt 180 ]; then
   echo "$Stop server cost time over 180 seconds. Now force stop it."
   kill -9 $PID && echo "Force stop successful."
   break;
  else
   echo "Cost $LOOPS seconds."
  fi

  let LOOPS=LOOPS+1
  sleep 1
 done
fi

总结

到此这篇关于springboot启动脚本start.sh和停止脚本 stop.sh的详细教程的文章就介绍到这了,更多相关springboot启动脚本start.sh和停止脚本 stop.sh内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合LocalDateTime的过程

    SpringBoot整合LocalDateTime的过程

    LocalDateTime 和 Date 是 Java 中处理日期和时间的两种不同的类,在 JDK8 中引入了 java.time 包,这篇文章主要介绍了SpringBoot整合LocalDateTime的过程,需要的朋友可以参考下
    2024-08-08
  • Java 超详细讲解设计模式之原型模式讲解

    Java 超详细讲解设计模式之原型模式讲解

    原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,今天通过本文给大家介绍下Java 原型设计模式,感兴趣的朋友一起看看吧
    2022-03-03
  • 详解Java多线程tryLock()方法使用

    详解Java多线程tryLock()方法使用

    本文主要介绍了Java多线程tryLock()方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • springboot本地调试没问题,打包运行报错原因及分析

    springboot本地调试没问题,打包运行报错原因及分析

    这篇文章主要介绍了springboot本地调试没问题,打包运行报错原因及分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 关于SpringBoot的热部署方案

    关于SpringBoot的热部署方案

    这篇文章主要介绍了关于SpringBoot的热部署方案,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本,本文就来详解热部署方案,需要的朋友可以参考下
    2023-05-05
  • SpringCloud Config配置中心原理以及环境切换方式

    SpringCloud Config配置中心原理以及环境切换方式

    这篇文章主要介绍了SpringCloud Config配置中心原理以及环境切换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 详解SpringMVC中使用Interceptor拦截器

    详解SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理,这篇文章主要介绍了详解SpringMVC中使用Interceptor拦截器,有兴趣的可以了解一下。
    2016-12-12
  • Java实现ArrayList排序的方法详解

    Java实现ArrayList排序的方法详解

    Java中常见的ArrayList排序方法主要为三种:JDK8的stream、Comparator#compare()和Comparable#compareTo(),本文将详解这三者的使用,需要的可以参考一下
    2022-05-05
  • SpringBoot构建RESTful API的实现示例

    SpringBoot构建RESTful API的实现示例

    本文主要介绍了SpringBoot构建RESTful API的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Spring Boot maven框架搭建教程图解

    Spring Boot maven框架搭建教程图解

    这篇文章主要介绍了Spring Boot maven框架搭建教程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论