SpringCloud启动脚本

2018-06-28  本文已影响0人  zxcvbnmzsedr

启动脚本有六个参数
依次是:启动命令、环境、App的Name、运行时端口、eureka的地址、对应的服务器外网地址

# 服务器外网地址,
有的服务器会有多个IP地址
,但是注册到eureka上面的实例一般都是使用的内网地址,
所以需要排除外网地址

inpp=$6
server=`/sbin/ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addrs"|grep -v $inpp`

if [ -z "$server" ];then
  server=$inpp
fi
echo 服务器地址 $server

# 实例的名字
APP=$3
# 环境
ENV=$2
# 打包出来的jar包的名字,可以直接从外面传
APP_NAME=$APP-1.0.0-SNAPSHOT
# 运行时端口
PORT=$4
# eureka地址
EUREKA_HOST=$5

HEAP_MEMORY=512M
PERM_MEMORY=0M
DIRECT_MEMORY=64M

APP_HOME=`pwd`

# 组装启动时的JVM参数

JVM_OPTS="-server -XX:+HeapDumpOnOutOfMemoryError"
JVM_OPTS="${JVM_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -XX:MaxPermSize=${PERM_MEMORY}  "
JVM_OPTS="${JVM_OPTS} -XX:MaxDirectMemorySize=${DIRECT_MEMORY}"
JVM_OPTS="${JVM_OPTS} -XX:+AlwaysPreTouch"
JVM_OPTS="${JVM_OPTS} -Duser.dir=${APP_HOME} -Dapp.name=$APP_NAME"

SPRING_OPTS="--myhost=$EUREKA_HOST --spring.profiles.active=$ENV --server.port=$PORT"
JAR_FILE=$APP_NAME.jar
LOG_PATH=$APP_HOME/logs/log


start(){
  checkpid
  if [ ! -n "$pid" ]; then
    echo "启动命令"
    echo "nohup java -jar $JVM_OPTS $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &"
    nohup java -jar $JVM_OPTS $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &
    echo "---------------------------------"
    echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
    echo "---------------------------------"
    sleep 5s
    # 到日志文件夹中寻找最新的一个日志文件
    LOG_FILE=`ls -t $LOG_PATH/*.log | head -1`
    # 打印启动日志,如果发现日志中包含Tomcat started这个字符说明启动成功,结束打印进程
    tail -f $LOG_FILE|while read line
    do
        kw=`echo $line|grep "Tomcat started"|wc -l`
        if [ $kw -lt 1 ];then
            echo $line
        else
        tail_pid=`ps -ef |grep $LOG_FILE |grep -v grep |awk '{print $2}'`
        kill -9 $tail_pid
        fi
    done
    echo "执行成功"
  else
      echo "$APP_NAME is runing PID: $pid"
  fi
}

checkpid(){
    pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
stop(){
     # 停止前直接到对应的eureka服务中删除对应的实例,URL规则可以根据注册时的不同规则自行制定
      curl -X "DELETE"  "http://$EUREKA_HOST/eureka/apps/$APP/$server:$PORT"
    checkpid
    if [ ! -n "$pid" ]; then
     echo "$APP_NAME not runing"
    else
      echo "$APP_NAME stop..."
      kill $pid
      sleep 2s
      kill -9 $pid
    fi
}

restart(){
    stop
    sleep 1s
    start
}

status(){
   checkpid
   if [ ! -n "$pid" ]; then
     echo "$APP_NAME not runing"
   else
     echo "$APP_NAME runing PID: $pid"
   fi
}
case $1 in
          start) start;;
          stop)  stop;;
          restart)  restart;;
          status)  status;;
              *)  echo "require start|stop|restart|status"  ;;
esac

上一篇下一篇

猜你喜欢

热点阅读