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