java應用啟動與停止的shell腳本分享
更新時間:2023年10月23日 08:08:03 作者:技術驛站
這篇文章主要和大家分享三個shell腳本,分別是jvm啟動參數相關的setjvment.sh,利用java命令啟動進程的start.sh和停止java進程的stop.sh,有需要的可以參考下
整體思路
基于shell腳本開發(fā)3個腳本,分別是
- jvm啟動參數相關的setjvment.sh,主要是jvm啟動相關參數配置
- start.sh,主要是利用java命令啟動進程,包含classpath和執(zhí)行結果日志保存相關設置
- stop.sh,主要是停止java進程,包括優(yōu)雅停止和強制停止
如果linux沒有安裝jdk,可使用如下命令安裝jdk:
sudo apt update sudo apt install openjdk-8-jdk
然后在啟動的文件.bash_profile中設置環(huán)境變量JAVA_HOME,
#!/bin/sh export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
相關腳本
setjvm
#!/bin/bash # 設置Java堆棧大小 JAVA_OPTS="$JAVA_OPTS -Xmn512m -Xms512m -Xmx1024m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m" JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=8 -XX:-UseAdaptiveSizePolicy" # 垃圾收集器設置 JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=60" JAVA_OPTS="$JAVA_OPTS -XX:+CMSClassUnloadingEnabled" # 打印GC日志 JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation" JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -Xloggc:$work_home/logs/gc.log -XX:GCLogFileSize=1m -XX:NumberOfGCLogFiles=10" # 打印DUMP日志 JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$work_home/logs" # 其他設置 JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC -XX:+UseFastAccessorMethods -XX:-UseBiasedLocking" # 指定隨機數生成器的種子源 JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom" # 設置java.ext.dirs JAVA_OPTS="$JAVA_OPTS -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:$work_home/lib" # 其他環(huán)境變量或配置設置 # export OTHER_ENV_VARIABLE=example_value
start
#!/bin/bash
CUR="$0"
while [ -h "$CUR" ]; do
ls=$(ls -ld "$CUR")
link=$(expr "$ls" : '.-> (.)$')
if expr "$link" : '/.*' >/dev/null; then
CUR="$link"
else
CUR=$(dirname "$CUR")/"$link"
fi
done
CUR_DIR=$(dirname "$CUR")
work_home=$(
cd "$CUR_DIR/.." >/dev/null
pwd
)
if [ -z $JAVA_HOME ]; then
echo "plz set JAVA_HOME env."
exit 1
fi
if [ -r "$work_home/bin/setenv.sh" ]; then
. "$work_home/bin/setjvmenv.sh"
fi
CLASSPATH=$CLASSPATH:$work_home/lib/conf
LOG_DIR="$work_home/logs"
if [ ! -d $LOG_DIR ]; then
mkdir "$LOG_DIR"
fi
main_class="com.toby.dynamic.data.source.start.PointApplication"
count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
if [ $count != 0 ]; then
app_id=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|awk '{print $2}'`
echo "already running with pid $app_id, start aborted."
else
echo "use java_home $JAVA_HOME"
echo "use work_home $work_home"
exec $JAVA_HOME/bin/java $JAVA_OPTS -cp $CLASSPATH \
-Dwork.home=$work_home -Djava.io.tmpdir=$work_home \
$main_class >$LOG_DIR/server.log 2>&1 &
echo "server started."
fi
stop
#!/bin/bash
PRG="$0"
while [ -h "$PRG" ]; do
ls=$(ls -ld "$PRG")
link=$(expr "$ls" : '.-> (.)$')
if expr "$link" : '/.*' >/dev/null; then
PRG="$link"
else
PRG=$(dirname "$PRG")/"$link"
fi
done
PRGDIR=$(dirname "$PRG")
work_home=$(
cd "$PRGDIR/.." >/dev/null
pwd
)
main_class="com.toby.dynamic.data.source.start.PointApplication"
count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
echo " stop server start."
if [ $count == 0 ]; then
echo "already stop,return."
exit 0
fi
app_id=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|awk '{print $2}'`
# 請求優(yōu)雅退出
kill -15 $app_id
SLEEP=5
STOPPED=0
while [ $SLEEP -ge 0 ]; do
count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
if [ $count == 0 ]; then
STOPPED=1
echo " server stopped."
break;
fi
if [ $SLEEP -gt 0 ]; then
sleep 1
fi
if [ $SLEEP -eq 0 ]; then
echo "server did not stopped in time."
fi
SLEEP=`expr $SLEEP - 1 `
done
if [ $STOPPED -eq 0 ]; then
echo "server killed fore"
SLEEP=5
kill -15 $app_id
while [ $SLEEP -ge 0 ]; do
count=`ps -ef|grep java|grep $work_home|grep $main_class|grep -v grep|wc -l`
if [ $count == 0 ]; then
STOPPED=1
echo " server has been killed."
break;
fi
if [ $SLEEP -gt 0 ]; then
sleep 1
fi
if [ $SLEEP -eq 0 ]; then
echo "server did not stopped in time."
fi
SLEEP=`expr $SLEEP - 1 `
done
if [ $STOPPED -eq 0 ]; then
echo "server has not been killed completely yet."
fi
fi
執(zhí)行結果

以上就是java應用啟動與停止的shell腳本分享的詳細內容,更多關于java應用啟動與停止的資料請關注腳本之家其它相關文章!
相關文章
Shell實現系統(tǒng)時間和BIOS時間同步校準腳本分享
這篇文章主要介紹了Shell實現系統(tǒng)時間和BIOS時間同步校準腳本分享,本文給出了多個時間同步服務器,然后用ntpdate輪詢同步,需要的朋友可以參考下2014-10-10
Shell eval通過變量獲取環(huán)境變量的方法實現
這篇文章主要介紹了Shell eval通過變量獲取環(huán)境變量的方法實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12

