美文网首页
使用shell脚本方式启动springboot的可执行jar

使用shell脚本方式启动springboot的可执行jar

作者: 码农梦醒 | 来源:发表于2018-04-11 07:52 被阅读1209次
    #!/bin/bash
    SERVER_NAME='spring-vue'
    # jar名称
    JAR_NAME='springboot-vue.jar'
    cd `dirname $0`
    BIN_DIR=`pwd`
    cd ..
    DEPLOY_DIR=`pwd`
    CONF_DIR=$DEPLOY_DIR/config
    # 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' config/application.yml`
    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/logs
    if [ ! -d $LOGS_DIR ]; then
      mkdir $LOGS_DIR
    fi
    STDOUT_FILE=$LOGS_DIR/stdout.log
    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 -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
    else
      JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
    fi
    CONFIG_FILES=" -Dlogging.path=$LOGS_DIR -Dlogging.config=$CONF_DIR/log4j2.xml -Dspring.config.location=$CONF_DIR/application.properties "
    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"
     脚本用例:
    # 启动应用
    ./start.sh
    # 以debug方式启动
    ./start debug
    # 启动任务并开启jmx监控
    ./start jmx
    # 获取当前的运行状态
    ./start status
    停止脚本:stop.sh
    #!/bin/bash
    cd `dirname $0`
    BIN_DIR=`pwd`
    cd ..
    DEPLOY_DIR=`pwd`
    CONF_DIR=$DEPLOY_DIR/config
    SERVER_NAME=$DEPLOY_DIR
    PIDS=`ps -ef | grep java | grep "$CONF_DIR" |awk '{print $2}'`
    if [ -z "$PIDS" ]; then
      echo "ERROR: The $SERVER_NAME does not started!"
      exit 1
    fi
    if [ "$1" != "skip" ]; then
      $BIN_DIR/dump.sh
    fi
    echo -e "Stopping the $SERVER_NAME ...\c"
    for PID in $PIDS ; do
      kill $PID > /dev/null 2>&1
    done
    COUNT=0
    while [ $COUNT -lt 1 ]; do
      echo -e ".\c"
      sleep 1
      COUNT=1
      for PID in $PIDS ; do
        PID_EXIST=`ps -f -p $PID | grep java`
        if [ -n "$PID_EXIST" ]; then
          COUNT=0
          break
        fi
      done
    done
    echo "OK!"
    echo "PID: $PIDS"
    

    相关文章

      网友评论

          本文标题:使用shell脚本方式启动springboot的可执行jar

          本文链接:https://www.haomeiwen.com/subject/ihaohftx.html