springboot啟動(dòng)腳本start.sh和停止腳本 stop.sh的詳細(xì)教程
我們?cè)陧?xiàng)目中都會(huì)遇到項(xiàng)目打包,可以通過assembly對(duì)我們的項(xiàng)目進(jìn)行打包。
針對(duì)打包構(gòu)建jar包,本文不再敘述。具體可以參考maven插件assembly使用及springboot啟動(dòng)腳本start.sh和停止腳本 stop.sh
這里面已經(jīng)有一個(gè)springboot 的啟動(dòng)腳本了,本文之所以還要寫,是因?yàn)橹暗哪_本存在一個(gè)問題。關(guān)閉腳本的時(shí)候是通過kill -9 命令進(jìn)行的,但其實(shí)我們項(xiàng)目中可能很多時(shí)候不能強(qiáng)制關(guān)閉的,在關(guān)閉之前需要做一些事情。比如將內(nèi)存數(shù)據(jù)存到磁盤,dubbo清空zookeeper里面的固定節(jié)點(diǎn) 等等。
這里將啟動(dòng)腳本環(huán)境變量抽出來作為一個(gè)文件來使用:
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 啟動(dòng)腳本:
#!/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
總結(jié)
到此這篇關(guān)于springboot啟動(dòng)腳本start.sh和停止腳本 stop.sh的詳細(xì)教程的文章就介紹到這了,更多相關(guān)springboot啟動(dòng)腳本start.sh和停止腳本 stop.sh內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot自動(dòng)配置實(shí)現(xiàn)流程詳細(xì)分析
這篇文章主要介紹了SpringBoot自動(dòng)配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對(duì)SpringBoot實(shí)現(xiàn)自動(dòng)配置做一個(gè)詳細(xì)的介紹。如果可以的話,能不能畫一下實(shí)現(xiàn)自動(dòng)配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點(diǎn)2022-12-12
通過反射實(shí)現(xiàn)Java下的委托機(jī)制代碼詳解
這篇文章主要介紹了通過反射實(shí)現(xiàn)Java下的委托機(jī)制代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
IDEA 2021版新建Maven、TomCat工程的詳細(xì)教程
這篇文章主要介紹了IDEA 2021版新建Maven、TomCat工程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
使用Spring事件機(jī)制實(shí)現(xiàn)異步的方法
這篇文章主要介紹了使用Spring事件機(jī)制實(shí)現(xiàn)異步的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06
Java基于HttpClient實(shí)現(xiàn)RPC的示例
HttpClient可以實(shí)現(xiàn)使用Java代碼完成標(biāo)準(zhǔn)HTTP請(qǐng)求及響應(yīng)。本文主要介紹了Java基于HttpClient實(shí)現(xiàn)RPC,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

