springboot启动脚本start.sh和停止脚本 stop.sh的详细教程
作者:筏镜 发布时间:2022-10-11 08:28:26
标签: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
来源:https://blog.csdn.net/fajing_feiyue/article/details/108170996


猜你喜欢
- /* * Copyright 2012-2013 The Haohui Network Cor
- 前言前面的篇幅里有提到通过InitializingBean和Disposable等接口可以对bean的初始化和销毁做一些自定义操作,那么有一
- 通过邮件找回密码功能的实现1、最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回。现在的系统在注册的时候都会强制输入邮箱,其一目的就是
- 目录引言编译环境及说明图片素材分割事件处理OnPaint事件鼠标交互事件代码汇总引言我们有时候会在程序的文件夹里看见一些图标,而这些图标恰好
- 实现方式和继承方式有什么区别呢?*区别:*继承Thread:线程代码存放在Thread子类run方法中*实现Runnable:线程代码存放在
- C#单击菜单栏或工具栏时通过反射打开窗体的方法,可以以取代长长的if-else或switch-case语句。要点:将菜单或工具栏项的名称设置
- 在java中调用xls格式化xml 使用javax.xml.transform.Transformer,将xml用xls格式化为另一种xml
- 前言:上午写代码时还好好的,下午不知道怎么回事突然就不显示logcat日志了,觉得很奇怪,于是开始找各种解决办法!现象如图所示,logcat
- 一、什么是异常异常机制:异常机制是指当程序出现错误后,程序如何处理。具体来说就是程序发生异常,异常机制提供程序的退出安全通道。通俗来说:就是
- 首先我们先看下效果图实现思路这是两张前后对比图,右边第二张图里面的已抢光标签图片当已经没有商品的时候就会显示了,在每个图片的中心位置,第一想
- 前言众所周知在spring boot内,设置session过期时间只需在application.properties内添加server.se
- Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计
- 以下是tcp socket客户端和服务端源码,代码简单大家参考使用吧Tcp Server#include <WinSock2.h>
- 本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下:Java中的SoftReferen
- 由于公司同是使用.NET和JAVA,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加
- 相关阅读C#使用LINQ查询操作符实例代码(一)C#使用LINQ查询操作符实例代码(二)示例业务背景介绍示例参考《C#高级编程(第六版)》L
- 要想实现android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻
- 定义装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,提供了继承更有弹性的替代方案,也体现了开闭原则案例需求一个人去咖啡店点
- xUtils简介xUtils 包含了很多实用的android工具。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),
- 一、项目简述功能包括:用户分为宠物,医生,管理员,宠物主人可进行注册选择医生挂号,选择日期,选择号源,医生可进行宠物接诊,管理员可对宠物,医