Java 启动脚本.sh

以下内容皆有备注,不做额外的文字说明。

#!/bin/bash

########## ----------   使用方法   ---------- ##########
# sh jar start|stop|restart|status
# 注意:设置自启动时,请先 cd 到项目路径下再执行

########## ----------   开始配置   ---------- ##########

# 获取当前路径
APP_HOME=`pwd`

##### 配置项 <<
##### 控制台日志集中文件 > 可不配置 [修改成: LOG_PATH=] > 不产生
LOG_PATH=$APP_HOME/console.log

##### 配置项 <<
##### jar 包分离 [代码|配置|lib] > 0 否、1 是
IS_SEPARATION=0

##### 配置项 <<
##### jar包名称 > IS_SEPARATION = 0 时使用
##### 1、不填写,检索根目录 *.jar
##### 2、填写不带后缀(.jar),视为关键字,检索根目录 *$JAR_NAME*.jar
##### 3、填写带后缀(.jar),视为全称
JAR_NAME=

##### 配置项 <<
##### 启动主类 (com.**.**Application) > IS_SEPARATION = 1 时使用
CLASS_NAME=

##### 配置项 <<
##### 引用依赖及相关文件的根路径 > IS_SEPARATION = 1 时使用
##### 若要引入其他可自行编辑 CP_ORDER,编辑 CP_ORDER 会忽略 CP_LIB、CP_CONFIG
##### CP_ORDER 格式 >> $APP_HOME/*:$APP_HOME/lib:$APP_HOME/config
CP_LIB=$APP_HOME/lib
CP_CONFIG=$APP_HOME/config
CP_ORDER=

##### 配置项 <<
##### 程序任务标识
##### IS_SEPARATION=0 > 作用1:避免相同与日期命名的 JAR_NAME
##### IS_SEPARATION=1 > 作用2:避免相同的 CLASS_NAME
##### >> 不配置
##### IS_SEPARATION=0 > 以 JAR_NAME 作为任务标识
##### IS_SEPARATION=1 > 以 CLASS_NAME 作为任务标识
APP_TAG=

##### 配置项 <<
##### JVM参数
##### 如若需要其他参数,请自行研究 JVM_OPTS 配置
##### 注意:Xmx 与 MaxPermSize 加起来不能超过物理机的实际内存
##### 	初始堆(内存)大小
Xms=512M
##### 	最大堆(内存)大小
Xmx=2048M
#####   初始持久代(内存)大小 
PermSize=256M
#####   最大持久代(内存)大小 
MaxPermSize=1024M
#####   将每次GC事件的相关情况记录该文件中
Xloggc=$APP_HOME/gc.log

########## ----------   配置结束   ---------- ##########

START_TYPE=
APP_NAME=

if [ "$IS_SEPARATION" = "0" ]; then
    if [[ $JAR_NAME =~ \d*.jar ]]; then
        APP_NAME=$JAR_NAME 
    else
        if [ "$JAR_NAME" = "" ]; then
            APP_NAME=`find . -maxdepth 1 -name "*.jar" -exec basename {} \;` 
        else
            APP_NAME=`find . -maxdepth 1 -name "*$JAR_NAME*.jar" -exec basename {} \;`
        fi
    fi
    START_TYPE="-jar"
else
    APP_NAME=$CLASS_NAME
    START_TYPE="-server"
fi

if [ "$LOG_PATH" = "" ]; then
    LOG_PATH=/dev/null
fi

CP_FILE=

if [ "$CP_ORDER" = "" ]; then
	if [ "$IS_SEPARATION" = "1" ]; then
		CP_FILE="-cp $APP_HOME/*:$CP_LIB/*:$CP_CONFIG"
	fi
else
	CP_FILE="-cp $CP_ORDER"
fi

JVM_OPTS=

if [ "$APP_TAG" = "" ]; then
	JVM_OPTS="-Dname=$APP_NAME -Duser.timezone=Asia/Shanghai -Xms$Xms -Xmx$Xmx -XX:PermSize=$PermSize -XX:MaxPermSize=$MaxPermSize -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC -Xloggc:$Xloggc"
else
	JVM_OPTS="-Dname=$APP_TAG -Duser.timezone=Asia/Shanghai -Xms$Xms -Xmx$Xmx -XX:PermSize=$PermSize -XX:MaxPermSize=$MaxPermSize -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC -Xloggc:$Xloggc"
fi

if [ "$1" = "" ]; then
	# 未输入操作命令
    echo -e "3[0;31m Please enter an operation command3[0m3[0;34m sh jar.sh {start|stop|restart|status} 3[0m"
    exit 1
fi

if [ "$APP_NAME" = "" ]; then
	# APP_NAME 未被配置,请检查参数 IS_SEPARATION、JAR_NAME、CLASS_NAME
    echo -e "3[0;31m Start error (APP_NAME is null), Please check param3[0m3[0;34m {IS_SEPARATION|JAR_NAME|CLASS_NAME} 3[0m"
    exit 1
fi

PID=

function getPID(){
	if [ "$APP_TAG" = "" ]; then
		PID=`ps -ef | grep java | grep $APP_NAME | grep -v grep | awk '{print $2}'`
	else
		PID=`ps -ef | grep java | grep $APP_TAG | grep -v grep | awk '{print $2}'`
	fi
}

function start(){
    getPID
    if [ x"$PID" != x"" ]; then
        echo "$APP_NAME (PID:$PID) is running..."
    else
        nohup java $START_TYPE $JVM_OPTS $CP_FILE $APP_NAME > $LOG_PATH 2>&1 &
		sleep 1
		getPID
        echo "Start $APP_NAME success... (PID:$PID)"
    fi
}

function stop(){
	getPID
    echo "Stop $APP_NAME"
    if [ x"$PID" != x"" ]; then
        kill -TERM $PID
        echo "$APP_NAME (PID:$PID) exiting..."
        while [ x"$PID" != x"" ]
        do
            sleep 1
            getPID
        done
        echo "$APP_NAME exited."
    else
        echo "$APP_NAME already stopped."
    fi
}

function restart(){
    stop
    sleep 3
    start
}

function status(){
	getPID
	if [ x"$PID" != x"" ]; then
        echo "$APP_NAME (PID:$PID) is running..."
    else
        echo "$APP_NAME is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)
esac
  • 打赏
请选择打赏方式
  • 微信
  • 支付宝

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部