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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • maven插件assembly使用及springboot启动脚本start.sh和停止脚本 stop.sh

    我们在项目中都会遇到项目打包,可以通过assembly对我们的项目进行打包. 1.首先看一下在打包前的项目文件结构. 2.在pom.xml中配置assembly插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plug

  • Maven3种打包方式中maven-assembly-plugin的使用详解

    maven-jar-plugin,默认的打包插件,用来打普通的project JAR包: maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包: maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等. 我们日常使用的以maven-assembly-plugin为最多,因为大数据项目中往往有很多shell脚本.SQL脚本..properties及.xml配置项等,采用assembly插件可以让输出的结构清晰而标准化. 要使用该插件

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

    我们在项目中都会遇到项目打包,可以通过assembly对我们的项目进行打包. 针对打包构建jar包,本文不再叙述.具体可以参考maven插件assembly使用及springboot启动脚本start.sh和停止脚本 stop.sh 这里面已经有一个springboot 的启动脚本了,本文之所以还要写,是因为之前的脚本存在一个问题.关闭脚本的时候是通过kill -9 命令进行的,但其实我们项目中可能很多时候不能强制关闭的,在关闭之前需要做一些事情.比如将内存数据存到磁盘,dubbo清空zooke

  • Centos下SpringBoot项目启动与停止脚本的方法

    使用Maven脚本在Centos服务器中启动与停止项目 首先项目需要引用Maven的SpringBoot插件 <profiles> <profile> <id>boot-repackage</id> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

  • Linux中Oracle服务启动和停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介绍一般而言如何启动oracle. 一.在Linux下启动Oracle 登录到CentOS,切换到oracle用户权限 # su – oracle 接着输入: $ sqlplus "/as sysdba" 原本的画面会变为 SQL> 接着请输入 SQL> startup 就可以正

  • SpringBoot启动时自动执行sql脚本的方法步骤

    需要配置项目下的yml文件: 在文件下加如如下配置: data: classpath:code-generator-data.sql initialization-mode: always spring.datasource.initialization-mode: 初始化模式(springboot2.0),其中有三个值: always为始终执行初始化 embedded只初始化内存数据库(默认值),如h2等 never为不执行初始化 spring.datasource.data: 数据初始化,默

  • SpringBoot启动执行sql脚本的3种方法实例

    目录 背景 配置application.yml文件 自定义DataSourceInitializer Bean 启动时执行方法 Springboot自动执行sql文件 总结 背景 项目里后端需要计算坐标距离,想用sql实现算法,然后通过执行一个sql脚本,创建一个函数供各业务调用.我们需要在springboot项目启动时执行sql脚本,在网上一顿搜索,总结了有三种做法: 配置application.yml文件 自定义DataSourceInitializer Bean 启动时执行方法 第一种做法

  • SpringBoot启动并初始化执行sql脚本问题

    目录 SpringBoot启动并初始化执行sql脚本 我们先看一下源码 下面我们验证一下这两种方式 SpringBoot项目在启动时执行指定sql文件 1. 启动时执行 2. 执行多个sql文件 3. 不同运行环境执行不同脚本 4. 支持不同数据库 5. 避坑 总结 SpringBoot启动并初始化执行sql脚本 如果我们想在项目启动的时候去执行一些sql脚本该怎么办呢,SpringBoot给我们提供了这个功能,可以在启动SpringBoot的项目时,执行脚本,下面我们来看一下. 我们先看一下源

  • Springboot项目平滑关闭及自动化关闭脚本

    Springboot项目平滑关闭及自动化关闭脚本,供大家参考,具体内容如下 核心代码 GracefulShutdown.java Shutdown.java ApplicationStarterRunner.java CommonInfo.java HttpCommonUtil.java application.properties 操作步骤 核心代码 GracefulShutdown.java package cnkj.site.utils; import org.apache.catalin

  • 详解如何在 Linux 启动时自动执行命令或脚本

    我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟.当你注销或者关机时,也是这样. 更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作. 本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法. 注意:我们假定使用的是 Bash 作为登录及注销的主 Shell.如果你使用的是其他 Shell,那么有些方法可能会无效.如果有其他的疑问

  • Shell脚本运行中的停止方法实现

    Linux系统Shell中提交了一个脚本,但是需要停止这个进程,如何处理? 方式1 killall file-flume-kafka 说明:killall是一个命令,不是kill all,file-flume-kafka是脚本名,此方法简单粗暴. 方式二 ssh $i "ps -ef | grep file-flume-kafka | grep -v grep | awk '{print \$2}' | xargs kill" ps参数: -e:显示所有进程 -f:全格式显示 ps -

随机推荐