乐趣区

关于linux:linux-java-shell-启动脚本

Java 启动脚本

#!/bin/bash

#===========================================================================================
# configuration
#===========================================================================================

APP_NAME=Project-1.0.0.jar #批改 app 名称
#JAVA_HOME=/usr/local/jdk-11.0.2 #jdk 地位 配了环境变量能够不设置, 没有环境变量须要开启, 指向 jdk 门路
LOG_DIR=logs #日志目录

OPEN_GCLOG=false #是否开启 gc 日志
OPEN_OOM_DUMP=false #是否开启 out of memory
OPEN_START_LOG=false #是否开启启动日志
OPEN_ILLEGAL_REFLEX_WARNING=false #是否敞开反射正告

#===========================================================================================
# init val
#===========================================================================================
export JAVA_HOME
BASE_DIR=$(dirname $(readlink -f "$0"))
APP_FULLNAME="${BASE_DIR}/${APP_NAME}"
JAVA="${JAVA_HOME}/bin/java"
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version"([0-9]*).*$/\1/p')
JAVA_OPT=
#===========================================================================================
# check jdk
#===========================================================================================

error_exit ()
{
  echo "ERROR: $1 !!"
  exit 1
}

if [-z "${JAVA_HOME}" ]; then
  error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
fi

#===========================================================================================
# init flags
#===========================================================================================

init_flags()
{
    for x in "$@"
    do
        if [$x = "-gc"]; then
            OPEN_GCLOG=true
        fi
        if [$x = "-oom"]; then
            OPEN_OOM_DUMP=true
        fi
        if [$x = "-sl"]; then
            OPEN_START_LOG=true
        fi
        if [$x = "-iw"]; then
            OPEN_ILLEGAL_REFLEX_WARNING=true
        fi
    done
}

init_flags $@

#===========================================================================================
# common func
#===========================================================================================

build_java_opt()
{
    if $OPEN_GCLOG; then
      if [["$JAVA_MAJOR_VERSION" -ge "9"]]; then
        JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/${LOG_DIR}/gc.log:time:filecount=10:filesize=100m"
      else
        JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/${LOG_DIR}/gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
      fi
    fi

    if $OPEN_ILLEGAL_REFLEX_WARNING; then
      if [["$JAVA_MAJOR_VERSION" -ge "9"]]; then
        JAVA_OPT="${JAVA_OPT} --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED"
      fi
    fi
    
    if $OPEN_OOM_DUMP; then
      JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/${LOG_DIR}/heapdump.hprof"
    fi
    
    JAVA_OPT="${JAVA_OPT} -Dloader.path=.,resources,lib"
    JAVA_OPT="${JAVA_OPT} -Djava.library.path=."
}

ensure_log_dir()
{if [ ! -e ${BASE_DIR}/${LOG_DIR} ]; then
        mkdir ${BASE_DIR}/${LOG_DIR}
    fi
}

build_java_opt
ensure_log_dir

#===========================================================================================
# Application
#===========================================================================================


#应用阐明,用来提醒输出参数
help() {echo "help: sh 执行脚本.sh [start|stop|restart|status]"
  echo "-gc:open save gc logs"
  echo "-oom:open out of memory"
  echo "-sl:open save start log"
  echo "-iw:open illegal reflex warning"
  exit 1
}

#检查程序是否在运行
is_exist(){pid=`ps -ef|grep ${APP_FULLNAME}|grep -v grep|awk '{print $2}' `
  #如果不存在返回 1,存在返回 0
  if [-z "${pid}" ]; then
    return 1
  else
    return 0
  fi
}
 
#启动办法
start(){
  build_java_opt
  ensure_log_dir
  is_exist
  if [$? -eq "0"]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    if $OPEN_START_LOG; then
       nohup "${JAVA}" -jar ${JAVA_OPT} "${BASE_DIR}/${APP_NAME}" > ${BASE_DIR}/${LOG_DIR}/startup.log 2>&1 &
    else
       nohup "${JAVA}" -jar ${JAVA_OPT} "${BASE_DIR}/${APP_NAME}" > /dev/null 2>&1 &
    fi
    is_exist
    if [$? -eq "0"]; then
      echo "${APP_NAME} is start success..."
    else
      echo "${APP_NAME} is start failed..."
    fi
  fi
}
 
#进行办法
stop(){
  is_exist
  if [$? -eq "0"]; then
    kill -9 $pid
    echo "${APP_NAME} is stoped..."
  else
    echo "${APP_NAME} is not running..."
  fi
}
 
#输入运行状态
status(){
  is_exist
  if [$? -eq "0"]; then
    echo "${APP_NAME} is running. Pid is ${pid}..."
  else
    echo "${APP_NAME} is NOT running..."
  fi
}
 
#重启
restart(){
  stop
  start
}
 
#依据输出参数,抉择执行对应办法,不输出则执行应用阐明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    help
    ;;
esac
退出移动版