java應(yīng)用啟動(dòng)與停止的shell腳本分享
整體思路
基于shell腳本開發(fā)3個(gè)腳本,分別是
- jvm啟動(dòng)參數(shù)相關(guān)的setjvment.sh,主要是jvm啟動(dòng)相關(guān)參數(shù)配置
- start.sh,主要是利用java命令啟動(dòng)進(jìn)程,包含classpath和執(zhí)行結(jié)果日志保存相關(guān)設(shè)置
- stop.sh,主要是停止java進(jìn)程,包括優(yōu)雅停止和強(qiáng)制停止
如果linux沒有安裝jdk,可使用如下命令安裝jdk:
sudo apt update sudo apt install openjdk-8-jdk
然后在啟動(dòng)的文件.bash_profile中設(shè)置環(huán)境變量JAVA_HOME,
#!/bin/sh export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
相關(guān)腳本
setjvm
#!/bin/bash # 設(shè)置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" # 垃圾收集器設(shè)置 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" # 其他設(shè)置 JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC -XX:+UseFastAccessorMethods -XX:-UseBiasedLocking" # 指定隨機(jī)數(shù)生成器的種子源 JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom" # 設(shè)置java.ext.dirs JAVA_OPTS="$JAVA_OPTS -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:$work_home/lib" # 其他環(huán)境變量或配置設(shè)置 # 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}'` # 請(qǐng)求優(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í)行結(jié)果
以上就是java應(yīng)用啟動(dòng)與停止的shell腳本分享的詳細(xì)內(nèi)容,更多關(guān)于java應(yīng)用啟動(dòng)與停止的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
shell結(jié)構(gòu)化命令if-then-else語句
在Shell腳本編程中,if-then-else語句提供了基于條件執(zhí)行不同命令的能力,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11Shell實(shí)現(xiàn)系統(tǒng)時(shí)間和BIOS時(shí)間同步校準(zhǔn)腳本分享
這篇文章主要介紹了Shell實(shí)現(xiàn)系統(tǒng)時(shí)間和BIOS時(shí)間同步校準(zhǔn)腳本分享,本文給出了多個(gè)時(shí)間同步服務(wù)器,然后用ntpdate輪詢同步,需要的朋友可以參考下2014-10-10Impala-shell命令參數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了Impala-shell命令參數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Shell eval通過變量獲取環(huán)境變量的方法實(shí)現(xiàn)
這篇文章主要介紹了Shell eval通過變量獲取環(huán)境變量的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Linux下使用expect命令編寫自動(dòng)化交互腳本
今天小編就為大家分享一篇關(guān)于Linux下使用expect命令編寫自動(dòng)化交互腳本,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-11-11