使用linux java shell启动脚本

 更新时间:2023年07月04日 08:52:42   作者:点墨  
这篇文章主要为大家介绍了使用linux java shell启动脚本,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Java 启动脚本

Linux shell

#!/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

以上就是使用linux java shell启动脚本的详细内容,更多关于linux java shell启动脚本的资料请关注脚本之家其它相关文章!

相关文章

  • shell脚本使用两个横杠接收外部参数的方法

    shell脚本使用两个横杠接收外部参数的方法

    这篇文章主要介绍了shell脚本使用两个横杠接收外部参数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • shell之分离解析脚本的实现方法

    shell之分离解析脚本的实现方法

    这篇文章主要介绍了shell之分离解析脚本的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Linux中执行shell脚本的4种方法总结

    Linux中执行shell脚本的4种方法总结

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下
    2014-08-08
  • Shell脚本case语句简明教程

    Shell脚本case语句简明教程

    这篇文章主要介绍了Shell脚本case语句简明教程,非常容易看懂的一篇文章,需要的朋友可以参考下
    2014-07-07
  • 使用Bash Shell获取文件名和目录名的简单方法

    使用Bash Shell获取文件名和目录名的简单方法

    这篇文章主要介绍了使用Bash Shell获取文件名和目录名的简单方法,解析路径是通常用Shell来实现的基本功能之一,需要的朋友可以参考下
    2015-07-07
  • awk中RS、ORS、FS、OFS的区别和联系小结

    awk中RS、ORS、FS、OFS的区别和联系小结

    这篇文章主要介绍了awk中RS、ORS、FS、OFS的区别和联系小结,用大量实例来说明和讲解,需要的朋友可以参考下
    2014-07-07
  • Linux Shell 自动交互功能实现

    Linux Shell 自动交互功能实现

    本文主要介绍了Linux Shell 自动交互功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Linux 中shell脚本设置开头固定格式的实现方法

    Linux 中shell脚本设置开头固定格式的实现方法

    这篇文章主要介绍了Linux 中shell脚本设置开头固定格式的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 一键配置CentOS iptables防火墙的Shell脚本分享

    一键配置CentOS iptables防火墙的Shell脚本分享

    这篇文章主要介绍了一键配置CentOS iptables防火墙Shell脚本分享,可保存到一个脚本文件中,在新安装的CentOS系统时一条命令搞定iptables配置,需要的朋友可以参考下
    2014-07-07
  • Linux 中的gunzip命令

    Linux 中的gunzip命令

    gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。下面通过本文给大家分享Linux 中的gunzip命令,一起看看吧
    2017-09-09

最新评论