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

所属分类: 软件编程 / java 阅读数: 90
收藏 0 赞 0 分享

我们在项目中都会遇到项目打包,可以通过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
更多精彩内容其他人还在看

Spring boot将配置属性注入到bean类中

本篇文章主要介绍了Spring boot将配置属性注入到bean类中,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java正则判断日期格式是否正确的方法示例

这篇文章主要介绍了Java正则判断日期格式是否正确的方法,结合实例形式分析了Java针对日期字符串正则判断的相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

java Future 接口使用方法详解

这篇文章主要介绍了java Future 接口使用方法详解,Future接口是Java线程Future模式的实现,可以来进行异步计算的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 读取外部资源的方法详解及实例代码

这篇文章主要介绍了Java 读取外部资源的方法详解及实例代码的相关资料,经常有读取外部资源的要求,如配置文件等等需要读取,需要的朋友可以参考下
收藏 0 赞 0 分享

Java正则表达式之split()方法实例详解

这篇文章主要介绍了Java正则表达式之split()方法,结合实例形式较为详细的分析了split方法的功能、使用方法及相关注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 存储模型和共享对象详解

这篇文章主要介绍了Java 存储模型和共享对象详解的相关资料,对Java存储模型,可见性和安全发布的问题是起源于Java的存储结构及共享对象安全,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用正则表达式实现找出数字功能示例

这篇文章主要介绍了Java使用正则表达式实现找出数字功能,结合实例形式分析了Java针对数字的匹配查找及非数字替换操作相关实现技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring核心IoC和AOP的理解

本文主要介绍了Spring核心IoC和AOP的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详解Spring AOP 拦截器的基本实现

本篇文章主要介绍了详解Spring AOP 拦截器的基本实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Mybatis 中的一对一,一对多,多对多的配置原则示例代码

这篇文章主要介绍了 Mybatis 中的一对一,一对多,多对多的配置原则示例代码,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多