以下内容皆有备注,不做额外的文字说明。
#!/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
- 打赏
请选择打赏方式
- 微信
- 支付宝