#!/bin/bash
#
# description: Starts and stops the App.jar
# author:hewenmin
# 注:脚本运行.jar文件需要放在目录 $vjar_prefix_env/programs/$APP_NAME/$ENV 下(环境前缀/programs/jar名称/运行环境/api)
vrun_method=$1
vjar_name=$2
vjar_profile=$3
vjar_run_user=$4
vjar_run_port=$5
vjar_prefix_env=/www
#-----------------判断参数执行方法定义begin----------------------
check_vjar_name(){
if [ ! -n "$vjar_name" ] ;then
echo "jar文件名称为空"
out_explain
exit
fi
}
check_vjar_profile(){
if [ ! -n "$vjar_profile" ] ;then
echo "请输入运行profile环境"
out_explain
exit
fi
}
check_vjar_run_user(){
if [ ! -n "$vjar_run_user" ] ;then
echo "启动脚本用户为空"
out_explain
exit
fi
}
check_vjar_prefix_env(){
if [ ! -n "$vjar_prefix_env" ] ;then
#echo "项目环境目录为空,默认输出到【/www】目录下"
vjar_prefix_env=/www
fi
}
out_explain(){
echo "参数备注:./springboot_ssl.sh 运行方法 jar文件名 profile环境 执行用户 端口号(没有采用配置文件中端口号)"
echo "例如:./springboot_ssl.sh start springboot_demo test root 8080"
echo "讲解:运行 /www/programs/springboot_demo/test/springboot_demo.jar的文件,运行测试环境,以root身份运行,运行在8080端口"
}
checkpid(){
pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
#-----------------判断参数执行方法定义end-------------------
#-----------------根据执行方法判断所需要参数being----------------------
if [ "$1" = "start" ] ;then
check_vjar_name
check_vjar_profile
check_vjar_run_user
check_vjar_prefix_env
fi
if [ "$1" = "stop" ] ;then
check_vjar_name
fi
if [ "$1" = "restart" ] ;then
check_vjar_name
fi
if [ "$1" = "status" ] ;then
check_vjar_name
fi
server_port=
if [ -n "$vjar_run_port" ] ;then
server_port="--server.port=$vjar_run_port"
fi
#-----------------根据执行方法判断所需要参数end-------------------
#----------------------------初始化环境变量begin----------------------------------
ENV=$vjar_profile
RUNNING_USER=$vjar_run_user
APP_NAME=$vjar_name
#定义jar文件和log文件目录
APP_PREFIX_HOME="$vjar_prefix_env/programs/$APP_NAME/$ENV/api"
APP_LOG_HOME="$vjar_prefix_env/logs/$APP_NAME/$ENV"
#具体文件名称
LOG_PATH=$APP_LOG_HOME/catalina.out
GC_LOG_PATH=$APP_LOG_HOME/gc-catalina.out.log
JAR_FILE=$APP_NAME.jar
#ENV=test
#RUNNING_USER=root
#APP_NAME=springboot_demo
#APP_PREFIX_HOME=/www
#APP_LOG_HOME="/www/logs/$APP_NAME/$ENV"
ADATE=`date +%Y%m%d%H%M%S`
#JMX监控需用到
JMX="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
#JVM参数
JVM_OPTS="-Dname=$APP_NAME-$ENV -Djeesuite.configcenter.profile=$ENV -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -Xloggc:$GC_LOG_PATH -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
#----------------------------初始化环境变量end----------------------------------
pid=0
start(){
checkpid
if [ ! -n "$pid" ]; then
checkdir
JAVA_CMD="nohup java -jar $JVM_OPTS $APP_PREFIX_HOME/$JAR_FILE $server_port --spring.profiles.active=$ENV > $LOG_PATH 2>&1 &"
su - $RUNNING_USER -c "$JAVA_CMD"
echo "---------------------------------"
echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
echo "---------------------------------"
sleep 2s
tail -f $LOG_PATH
else
echo "$APP_NAME is runing PID: $pid"
fi
}
checkdir(){
dirname $0|grep "^/" >/dev/null
if [ $? -eq 0 ];then
APP_LOG_HOME=`dirname $0`
else
dirname $0|grep "^\." >/dev/null
retval=$?
if [ $retval -eq 0 ];then
APP_LOG_HOME=`dirname $0|sed "s#^.#$APP_LOG_HOME#"`
else
APP_LOG_HOME=`dirname $0|sed "s#^#$APP_LOG_HOME/#"`
fi
fi
if [ ! -d "$APP_LOG_HOME" ];then
mkdir -p $APP_LOG_HOME
fi
}
status(){
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME runing PID: $pid"
fi
}
stop(){
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME stop..."
kill -9 $pid
fi
}
restart(){
stop
sleep 1s
start
}
case $1 in
start) start;;
stop) stop;;
restart) restart;;
status) status;;
*) echo "require start|stop|restart|status" ;;
esac
springboot项目通用管理shell脚本
最新推荐文章于 2024-07-07 21:12:16 发布