123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/bin/bash
- # 项目名称
- SERVER_NAME="${project.artifactId}"
- # jar名称
- JAR_NAME="${project.build.finalName}.jar"
- # 进入bin目录
- cd `dirname $0`
- # bin目录绝对路径
- BIN_DIR=`pwd`
- # 返回到上一级项目根目录路径
- cd ..
- # 打印项目根目录绝对路径
- # `pwd` 执行系统命令并获得结果
- DEPLOY_DIR=`pwd`
- # 如果没有指定外部配置文件,则使用默认的配置文件
- while getopts ":c:j:" opt
- do
- case $opt in
- j)
- # 如果没有指定外部配置文件,则使用默认的配置文件
- echo "java命令行参数:$OPTARG"
- JAVA_OPTS=$OPTARG
- ;;
- c)
- echo "配置文件路径$OPTARG"
- USER_ASSIGN_CONFIG=$OPTARG
- ;;
- ?)
- echo "未知参数"
- exit 1;;
- esac
- done
- # 如果指定的是目录,spring则会读取目录中的所有配置文件
- if [ -n "$USER_ASSIGN_CONFIG" ]; then
- CONF_DIR=$USER_ASSIGN_CONFIG
- else
- CONF_DIR=$DEPLOY_DIR/config
- fi
- # SERVER_PORT=`sed '/server.port/!d;s/.*=//' config/application.properties | tr -d '\r'`
- # 获取应用的端口号
- SERVER_PORT=`sed -nr '/port: [0-9]+/ s/.*port: +([0-9]+).*/\1/p' $CONF_DIR/application.yml|head -1`
- PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
- if [ "$1" = "status" ]; then
- if [ -n "$PIDS" ]; then
- echo "The $SERVER_NAME is running...!"
- echo "PID: $PIDS"
- exit 0
- else
- echo "The $SERVER_NAME is stopped"
- exit 0
- fi
- fi
- if [ -n "$PIDS" ]; then
- echo "ERROR: The $SERVER_NAME already started!"
- echo "PID: $PIDS"
- exit 1
- fi
- if [ -n "$SERVER_PORT" ]; then
- SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
- if [ $SERVER_PORT_COUNT -gt 0 ]; then
- echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
- exit 1
- fi
- fi
- # 项目日志输出绝对路径
- LOGS_DIR=$DEPLOY_DIR/log
- # 如果logs文件夹不存在,则创建文件夹
- if [ ! -d $LOGS_DIR ]; then
- mkdir $LOGS_DIR
- fi
- STDOUT_FILE=$LOGS_DIR/catalina.log
- # JVM Configuration
- JAVA_OPTS+=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
- JAVA_DEBUG_OPTS=""
- if [ "$1" = "debug" ]; then
- JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
- fi
- JAVA_JMX_OPTS=""
- if [ "$1" = "jmx" ]; then
- JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
- fi
- JAVA_MEM_OPTS=""
- BITS=`java -version 2>&1 | grep -i 64-bit`
- if [ -n "$BITS" ]; then
- JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -Xss256k"
- else
- JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m"
- fi
- # 加载外部log4j2文件的配置
- LOG_IMPL_FILE=log4j2.xml
- LOGGING_CONFIG=""
- if [ -f "$CONF_DIR/$LOG_IMPL_FILE" ]
- then
- LOGGING_CONFIG="-Dlogging.config=$CONF_DIR/$LOG_IMPL_FILE"
- fi
- CONFIG_FILES=" -Dlogging.path=$LOGS_DIR $LOGGING_CONFIG -Dspring.config.location=$CONF_DIR/ "
- echo -e "Starting the $SERVER_NAME ..."
- nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES -jar $DEPLOY_DIR/lib/$JAR_NAME > $STDOUT_FILE 2>&1 &
- COUNT=0
- while [ $COUNT -lt 1 ]; do
- echo -e ".\c"
- sleep 1
- if [ -n "$SERVER_PORT" ]; then
- COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
- else
- COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
- fi
- if [ $COUNT -gt 0 ]; then
- break
- fi
- done
- echo "OK!"
- PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
- echo "PID: $PIDS"
- echo "STDOUT: $STDOUT_FILE"
|