`
fly533
  • 浏览: 109323 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

spring boot部署启动脚本

阅读更多
#功能:
#1、指定用户运行——未实现
#2、默认logs目录——可否另外指定?
#3、JMX监控——待实现,需要启用第二参数来指定
#4、设置JVM参数(指定程序运行名称、时区、内存大小、GC回收器设置、gc日志文件)
#5、 指定配置文件的环境变量
#6、start 启动时检查程序是否已经启动
#7、stop 停止程序、stop之前会先dump。带完善:kill失败检查,然后用kill -9, 有可能存在多个server
#8、status 查看程序是否运行
#9、restart 重启
#10、dump dump系统状态和jvm信息到文件中
#11、配置文件使用哪种方式更好?
#12、默认的jvm配置
#待补充端口占用检查

#使用:
#1、上传.sh脚本到服务器中,授权脚本执行权限sudo chmod +x ./app.sh
#2、启动示例 ./app.sh start


ENV=dev
RUNNING_USER=root
ADATE=`date +%Y%m%d%H%M%S`
SERVER_NAME=springboot-demo

APP_HOME=`pwd`

dirname $0|grep "^/" >/dev/null
if [ $? -eq 0 ];then
   APP_HOME=`dirname $0`
else
    dirname $0|grep "^\." >/dev/null
    retval=$?
    if [ $retval -eq 0 ];then
        APP_HOME=`dirname $0|sed "s#^.#$APP_HOME#"`
    else
        APP_HOME=`dirname $0|sed "s#^#$APP_HOME/#"`
    fi
fi

if [ ! -d "$APP_HOME/logs" ];then
  mkdir $APP_HOME/logs
fi

LOG_PATH=$APP_HOME/logs/$SERVER_NAME.out
GC_LOG_PATH=$APP_HOME/logs/gc-$SERVER_NAME-$ADATE.log
#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=$SERVER_NAME -Djeesuite.configcenter.profile=$ENV -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -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"

JAR_FILE=$SERVER_NAME.jar
pid=0


start(){
  checkpid
  if [ ! -n "$pid" ]; then
    #JAVA_CMD="nohup java -server -jar $JVM_OPTS $JAR_FILE > $LOG_PATH 2>&1 &"
    #su - $RUNNING_USER -c "$JAVA_CMD"
    nohup java -server -jar $JVM_OPTS $JAR_FILE > $LOG_PATH 2>&1 &
    echo "---------------------------------"
    echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
    echo "---------------------------------"
    sleep 3s
    tail -f $LOG_PATH
  else
      echo "$SERVER_NAME is runing PID: $pid"   
  fi

}


status(){
   checkpid
   if [ ! -n "$pid" ]; then
     echo "$SERVER_NAME not runing"
   else
     echo "$SERVER_NAME runing PID: $pid"
      sleep 4s
     tail -f $LOG_PATH
   fi 
}

checkpid(){
    pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}

stop(){
    checkpid
    if [ ! -n "$pid" ]; then
     echo "$SERVER_NAME not runing"
    else
      dump
      echo "$SERVER_NAME stop..."
      kill $pid
    fi 
}

restart(){
    stop 
    sleep 1s
    start
}
dump(){ 
    LOGS_DIR=$APP_HOME/logs/
    DUMP_DIR=$LOGS_DIR/dump
    if [ ! -d $DUMP_DIR ]; then
        mkdir $DUMP_DIR
    fi
    DUMP_DATE=`date +%Y%m%d%H%M%S`
    DATE_DIR=$DUMP_DIR/$DUMP_DATE
    if [ ! -d $DATE_DIR ]; then
        mkdir $DATE_DIR
    fi
    
    echo  "Dumping the $SERVER_NAME ...\c"
    
    PIDS=`ps -ef | grep java | grep $JAR_FILE |awk '{print $2}'`
    for PID in $PIDS ; do
        jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
        echo -e  "PID=$PID .\c"
        jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
        echo -e  ".\c"
        jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
        echo -e  ".\c"
        jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
        echo -e  ".\c"
        jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
        echo -e  ".\c"
        jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
        echo -e  ".\c"
        jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
        echo -e  ".\c"
        if [ -r /usr/sbin/lsof ]; then
        /usr/sbin/lsof -p $PID > $DATE_DIR/lsof-$PID.dump
        echo -e  ".\c"
        fi
    done
    
    if [ -r /bin/netstat ]; then
    /bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
    echo -e  "netstat.dump ..."
    fi
    if [ -r /usr/bin/iostat ]; then
    /usr/bin/iostat > $DATE_DIR/iostat.dump 2>&1
    echo -e  "iostat.dump ..."
    fi
    if [ -r /usr/bin/mpstat ]; then
    /usr/bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
    echo -e  "mpstat.dump ..."
    fi
    if [ -r /usr/bin/vmstat ]; then
    /usr/bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
    echo -e  "vmstat.dump ..."
    fi
    if [ -r /usr/bin/free ]; then
    /usr/bin/free -t > $DATE_DIR/free.dump 2>&1
    echo -e  "free.dump ..."
    fi
    if [ -r /usr/bin/sar ]; then
    /usr/bin/sar > $DATE_DIR/sar.dump 2>&1
    echo -e  ".\c"
    fi
    if [ -r /usr/bin/uptime ]; then
    /usr/bin/uptime > $DATE_DIR/uptime.dump 2>&1
    echo -e  ".\c"
    fi
    
    echo "OK!"
    echo "DUMP: $DATE_DIR"
}

case $1 in  
          start) start;;  
          stop)  stop;; 
          restart)  restart;;  
          status)  status;;   
          dump)  dump;;   
              *)  echo "require start|stop|restart|status|dump"  ;;  
esac 




* 参考文档 [url](https://blog.csdn.net/vakinge/article/details/78706679)
  • app.zip (2.1 KB)
  • 下载次数: 23
  • 大小: 64.6 KB
  • 大小: 32.7 KB
0
0
分享到:
评论

相关推荐

    spring boot/spring cloud项目启动脚本,默认名称:start.sh

    linux服务器,springboot,spring cloud、spring cloud alibaba等项目启动脚本 下载脚本, 1,上传脚本至jar包同级目录 2,更改脚本: jar包名称 项目文件路径 日志路径(包含日志名称) 脚本已配置好jvm优化...

    jenkins启动spring boot 服务shll启动脚本

    jenkins启动spring boot 服务shll启动脚本 主要是备份原来的服务,kill掉重新部署

    linux的spring boot项目的启动停止脚本

    总之,编写Linux上的Spring Boot启动和停止脚本是实现高效部署和管理的关键步骤。它们提供了对应用生命周期的控制,使得我们可以方便地启动、停止和监控应用,同时保持系统的整洁和有序。在实际操作中,应根据具体...

    springboot项目启动bat脚本

    "springboot项目启动bat脚本"指的是一个批处理(.bat)文件,用于自动化启动Spring Boot应用程序的过程。这种脚本大大简化了操作,使得开发者或运维人员能够便捷地启动服务,而无需手动通过命令行执行`java -jar`...

    SpringBoot windows启动脚本

    SpringBoot windows启动脚本

    Linux启动与停止spring boot工程的脚本示例

    一般我们在开发的时候经常使用的是前面两种运行方式,在部署实施的时候使用的第三种方式,下面我们就重点说明下载linux环境中运行和停止springboot项目的指令和脚本: 一、指令 nohup 不挂断运行指令 一般在linux...

    spring-boot-cli-1.5.8

    使用Spring Boot CLI,你可以通过`spring run`命令直接执行Groovy脚本,这些脚本可以包含Spring的依赖注入、自动配置等功能。例如,你可以在Groovy脚本中定义一个简单的Spring Boot应用,然后通过CLI直接运行: ```...

    spring boot cli 1.5.10

    5. **打包与部署**:使用`spring jar`命令可以将Groovy脚本打包为JAR,然后通过常规方式部署到服务器。 ### 实例应用 假设我们创建一个简单的RESTful API,使用`spring init --dependencies=web`命令初始化一个Web...

    Spring Boot应用开发框架 v2.6.14.zip

    2. **嵌入式Web服务器**:Spring Boot可以轻松地与内嵌的Tomcat、Jetty或Undertow等Web服务器一起使用,无需额外部署到外部服务器。 3. **自动配置**:Spring Boot会根据项目中引入的依赖自动配置相关的Bean。例如...

    Spring Boot + Vue3 完整开发全栈项目附资料.zip

    "jiawawiki"可能包含项目的源码、文档、数据库脚本、部署说明等资源,对于学习和参考具有极高价值。 综上所述,本项目实战涵盖了Spring Boot和Vue3的集成、全栈开发流程、关键组件使用等知识点,旨在帮助开发者提升...

    spring boot 高清带目录手册

    Spring Boot 使创建独立的、产品级的、基于Spring的应用变得更容易,你只需要运行run即可...你可以使用Spring Boot创建Java应用,用java-jar或更传统的war包来部署应用。我们也提供了运行”Spring脚本”的命令行工具。

    Linux部署springboot(springcloud)启动多个jar

    本篇文章将深入讲解如何在Linux环境下部署SpringBoot(SpringCloud)项目,并启动多个jar文件,以及如何通过shell脚本来实现日志管理和服务控制。 首先,SpringBoot是一个基于Spring框架的轻量级开发工具,它内置了...

    Java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).7z

    在这个就业信息管理网站中,Spring Boot作为核心框架,将承担起应用程序的启动、依赖管理和配置工作。开发者可以利用Spring Boot的starter特性快速引入所需的依赖,例如Spring Data JPA用于数据库操作,Spring ...

    spring boot整合vue

    5. **运行Spring Boot应用**:启动Spring Boot应用,服务器会自动处理静态资源请求。 6. **测试访问**:在浏览器中输入应用地址,如`http://localhost:8080/`,如果一切配置正确,应能正常显示Vue应用。 **注意点:...

    spring+boot+cookbook

    10. **Spring Boot CLI**:Spring Boot命令行接口(CLI)是快速试用和开发Spring Boot应用的工具,可以通过命令行编写和运行Groovy脚本。 11. **微服务架构**:Spring Boot是微服务架构的理想选择,可以轻松创建...

    基于spring boot的个人博客网站项目+ppt

    2. **内嵌式Servlet容器**:Spring Boot默认提供了内嵌的Tomcat服务器,可以避免打包成war部署的麻烦,直接运行jar文件即可启动应用。 3. **起步依赖**:Spring Boot提供了一系列的起步依赖,如spring-boot-starter-...

    Spring Boot 2.1.3 官方文档

    2. 内嵌服务器:Spring Boot支持内嵌Tomcat、Jetty等Web服务器,开发者无需额外部署,可以直接运行jar文件启动服务。 3. 健康检查:提供了Actuator模块,用于监控应用的健康状态,包括内存、线程、HTTP连接器等各种...

Global site tag (gtag.js) - Google Analytics