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

作者:筏镜 时间:2022-10-11 08:28:26 

我们在项目中都会遇到项目打包,可以通过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

来源:https://blog.csdn.net/fajing_feiyue/article/details/108170996

标签:springboot,启动脚本,start.sh,停止脚本,stop.sh
0
投稿

猜你喜欢

  • java通过Idea远程一键部署springboot到Docker详解

    2022-03-26 09:31:27
  • C#语法新特性之元组实例详解

    2022-09-20 03:05:53
  • 基于C#实现磁性吸附窗体

    2022-09-04 07:04:51
  • 各种格式的编码解码工具类分享(hex解码 base64编码)

    2021-11-17 07:04:51
  • Android8.0适配前台定位服务service的示例代码

    2021-05-25 17:18:36
  • Java中Lombok常用注解分享

    2023-06-13 01:32:48
  • Mybatis拦截器的实现介绍

    2023-07-04 04:23:31
  • Android开发中判断手机是否安装了QQ或者微信

    2022-01-09 08:44:24
  • SpringBoot使用prometheus监控的示例代码

    2021-05-29 02:37:41
  • android 获取视频第一帧作为缩略图的方法

    2022-11-22 19:30:25
  • java实现二分法查找出数组重复数字

    2022-07-15 03:54:00
  • WPF实现自带触控键盘的文本框

    2023-08-25 15:23:20
  • SpringBoot使用jsr303校验的实现

    2022-04-21 04:02:39
  • Java获取json数组对象的实例讲解

    2023-08-24 14:55:28
  • Android使用Handler实现定时器与倒计时器功能

    2022-03-30 09:06:57
  • Android实现图像灰度化、线性灰度变化和二值化处理方法

    2021-10-17 15:49:10
  • Java编程实现生成给定范围内不重复随机数的方法小结

    2022-03-21 22:45:13
  • MybatisPlus代码生成器含XML文件详解

    2023-10-25 21:51:26
  • Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)

    2023-02-25 04:52:37
  • JavaWeb中上传和下载文件实例代码

    2023-11-04 10:24:00
  • asp之家 软件编程 m.aspxhome.com