栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

批量启动SpringBoot/Spring Cloud 项目脚本

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

批量启动SpringBoot/Spring Cloud 项目脚本

一、Shell sh 脚本详见文章尾部

二、将命令放到指定目录下, 该处指定为 /home/script

三、需修改指定用户的根目录下的 .bashrc 文件,指定命令别名:
alias spring='sh /home/script/spring.sh'
# 初始化环境参数
if [ -f /home/script/spring-env ]; then
    . /home/script/spring-env
fi
四、修改后,执行 source:
source ~/.bashrc # 此命令是以root 为例,其他用户需指定对应的文件路径
Shell sh脚本: 一)spring-env 需定义所有参数
# spring-env
 
# 定义脚本环境变量
 
# 1. 指定命令别名
export SPRING_SH_COMMAND_ALIAS=spring
# 2. 定义应用 jar 存放的目录
export SPRING_SH_APPLICATION_FILE=
# 3. 应用前缀名称
export SPRING_SH_APPLICATION_PRE_NAME=
# 4. 定义启动脚本路径(具体到sh文件)
export SPRING_SH_START_SH_PATH=
# 5. 定义停止脚本路径(具体到sh文件)
export SPRING_SH_STOP_SH_PATH=
# 6. 定义查看日志脚本路径(具体到sh文件)
export SPRING_SH_LOG_SH_PATH=
# 7. 支持的应用简称集字符串(请按照启动顺序排列, 建议将gateway 网关服务置于最后)
export SPRING_SH_APPLICATION_STR=
二)spring.sh 需修改以下内容
     指定命令别名
    command_alias=定义应用 jar 存放的目录
    APPLICATION_FILE=应用前缀名称
    APPLICATION_PRE_NAME=定义启动脚本
    start_sh_path=定义停止脚本
    stop_sh_path=定义查看日志脚本
    log_sh_path=支持的应用简称集 (请按照启动顺序排列, 建议将gateway 网关服务置于最后)
    APPLICATIONS=
    applications_str=


















spring.sh 脚本
#!/bin/bash
 
# 传入的第一个参数 - 应用简称
jarSimpleName=$1
 
# 传入的第二个参数 - 指令
direct=$2
 
# 指定命令别名
command_alias=$SPRING_SH_COMMAND_ALIAS
 
# 定义应用 jar 存放的目录
APPLICATION_FILE=$SPRING_SH_APPLICATION_FILE
 
# 应用前缀名称
APPLICATION_PRE_NAME=$SPRING_SH_APPLICATION_PRE_NAME
 
# 定义启动脚本
start_sh_path=$SPRING_SH_START_SH_PATH
 
# 定义停止脚本
stop_sh_path=$SPRING_SH_STOP_SH_PATH
 
# 定义查看日志脚本
log_sh_path=$SPRING_SH_LOG_SH_PATH
 
# 支持的应用简称集 (请按照启动顺序排列, 建议将gateway 网关服务置于最后)
APPLICATIONS=(`echo ${SPRING_SH_APPLICATION_STR} | tr ' ' ' '` )
applications_str="${SPRING_SH_APPLICATION_STR} all"
# 日志后缀
APPLICATION_SUFFIX_NAME=".log"
 
# 拼接应用日志的绝对路径 + 日志前缀名称
APPLICATION_LOG=$APPLICATION_FILE/logs/${APPLICATION_PRE_NAME}
 
# 支持的指令集
directs=(start stop restart log status)
directs_str=${directs[@]}
 
# 定义检查命令合法性成功标识值 - 0
conditionSuccess=0
 
# 判断传入的应用简称是否为空,并检查是否存在于定义的简称集中
if [ "$jarSimpleName" != "" ];then
    if [[ "${APPLICATIONS[@]}"  =~ "${jarSimpleName}" ]]; then
#        echo "$jarSimpleName exists"
        conditionSuccess=0
    elif [[ ${jarSimpleName} != "all"  && ! "${APPLICATIONS[@]}"  =~ "${jarSimpleName}" ]]; then
        echo -e "33[31m 传入应用: ${jarSimpleName} 不受支持 33[0m"
        echo -e "33[33m 支持的应用:${applications_str} 33[0m"
        conditionSuccess=1
    fi
else
    echo -e "33[31m 请传入一个应用名称 33[0m"
    echo -e "33[33m 支持的应用:${applications_str} 33[0m"
    conditionSuccess=1
fi
 
# 判断传入的指令是否为空,并检查是否存在于定义的指令集中
if [ "$direct" = "" ];then
    echo -e "33[31m 请传入指令 33[0m"
    echo -e "33[33m 支持的指令:${directs_str} 33[0m"
    conditionSuccess=1
elif [[ ! "${directs[@]}"  =~ "${direct}" ]]; then
    echo -e "33[31m 请传入正确的指令 33[0m"
    echo -e "33[33m 支持的指令:${directs_str} 33[0m"
    conditionSuccess=1
fi
 
# 判断最终是否通过命令合法性检测,若合法性成功标识值不为0 则认为未通过命令合法性检查
if [ ! "$conditionSuccess" = "0" ];then
    echo -e "33[33m 命令:blade {${applications_str}} {${directs_str}}n33[0m"
    exit
fi
 
# echo "继续执行"
# echo "应用:$jarSimpleName"
# echo "指令:$direct"
case $direct in
    start)
        if [ "$jarSimpleName" = "all" ];then
            for item in ${APPLICATIONS[*]}
            do
                echo -n "" > ${APPLICATION_LOG}${item}${APPLICATION_SUFFIX_NAME}
                sh $start_sh_path $item
                echo -e "33[33m 开始启动应用:${item}33[0m"
                # 等待2 秒
                # sleep 2
                tail -f ${APPLICATION_LOG}${item}${APPLICATION_SUFFIX_NAME} | while read line
                do
                    echo "$line"
                    if [[ $line =~ "Started" && $line =~ "Application" && $line =~ "seconds (JVM running for" ]]; then
                        kill -9 `ps axu|grep "tail -f ${APPLICATION_LOG}${item}${APPLICATION_SUFFIX_NAME}"|grep -v "grep"|awk '{printf $2}'`
                    fi
                done
                echo -e "33[33m 应用:${item} 启动完成!!!33[0m"
            done
        else
            sh $start_sh_path $jarSimpleName
            tail -f ${APPLICATION_LOG}${jarSimpleName}${APPLICATION_SUFFIX_NAME}
        fi
    ;;
 
    stop)
        if [ "$jarSimpleName" = "all" ];then
            for item in ${APPLICATIONS[*]}
            do
                sh $stop_sh_path $item
            done
        else
            sh $stop_sh_path $jarSimpleName
        fi
    ;;
 
    restart)
        APPLICATION_NAME="spring-${jarSimpleName}.jar"
        APPLICATION_PID=`jps | grep ${APPLICATION_NAME} | awk '{print $1}'`
        if [[ "$APPLICATION_PID" != "" ]];then
            sh $stop_sh_path $jarSimpleName
        fi
        sh $start_sh_path $jarSimpleName
    ;;
 
    log)
        sh $log_sh_path $jarSimpleName
    ;;
 
    status)
        if [ "$jarSimpleName" = "all" ];then
            for item in ${APPLICATIONS[*]}
            do
                APPLICATION_PID=`jps | grep ${APPLICATION_PRE_NAME}${item} | awk '{print $1}'`
                if [ "$APPLICATION_PID" != "" ];then
                    echo -e "33[33m PID:$APPLICATION_PID 应用 $item 处于运行中....33[0m"
                else
                    echo -e "33[31m PID:为空 应用 $item 已停止运行!!!33[0m"
                fi
            done
        else
            APPLICATION_PID=`jps | grep ${APPLICATION_PRE_NAME}${jarSimpleName} | awk '{print $1}'`
            if [ "$APPLICATION_PID" != "" ];then
                echo -e "33[33m PID:$APPLICATION_PID 应用 $jarSimpleName 处于运行中....n33[0m"
            else
                echo -e "33[31m PID:为空 应用 $jarSimpleName 已停止运行!!!n33[0m"
            fi
        fi
    ;;
 
    *)
        echo -e "33[33m blade 应用名称 指令 33[0m"
        echo -e "33[33m 支持的应用:${applications_str} 33[0m"
        echo -e "33[33m 支持的指令:${directs_str} 33[0m"
        echo -e "33[33m 命令:${command_alias} {${applications_str}} {${directs_str}}33[0m"
        echo -e "33[33m 示例:启动 user 服务执行命令 --> ${command_alias} user start n33[0m"
esac
二)spring-start.sh 需要修改以下内容
    定义应用 jar 存放的目录
    APPLICATION_FILE=应用前缀名称
    APPLICATION_PRE_NAME=通用的Java 参数
    JAVA_OPTS=通用的应用参数
    APPLICATION_OPTS=定义各个应用的个性化启动参数
    例如:gateway 的个性化启动参数:APPLICATION_OPTS_MAP["gateway"]="-Dserver.port=8888"
    有几个应用需要个性化就加几个
spring-start.sh 脚本
#!/bin/bash
jarSimpleName=$1
JAVA_OPTS=""
APPLICATION_OPTS="-Dfile.encoding=UTF-8 -Dspring.profiles.active=dev"
 
# 定义应用 jar 存放的目录
APPLICATION_FILE=$SPRING_SH_APPLICATION_FILE
 
# 拼接完整的应用名称
APPLICATION_NAME="${SPRING_SH_APPLICATION_PRE_NAME}${jarSimpleName}"
 
# 拼接完整的应用 jar 名称
APPLICATION_JAR_NAME=${APPLICATION_NAME}.jar
 
# 拼接应用的绝对路径
APPLICATION=$APPLICATION_FILE/$APPLICATION_JAR_NAME
 
# 拼接应用日志的绝对路径 + 日志名称
APPLICATION_LOG=$APPLICATION_FILE/logs/${APPLICATION_NAME}.log
 
# 获取应用的Pid
APPLICATION_PID=`jps | grep ${APPLICATION_NAME} | awk '{print $1}'`
 
# 定义网关服务的端口
GATEWAY_APPLICATION_PORT=8888
 
# 定义各个应用的个性化启动参数
declare -A APPLICATION_OPTS_MAP
# 定义 gateway 个性化启动参数
APPLICATION_OPTS_MAP["gateway"]="-Dserver.port=${GATEWAY_APPLICATION_PORT}"
 
if [[ "$APPLICATION_PID" != "" ]];then
    echo -e "33[31m 应用: ${jarSimpleName} 处于运行状态,无需再次启动...33[0m"
else
    # 置空日志文件
    echo -n "" > $APPLICATION_LOG
    # 后台运行应用
    nohup java $JAVA_OPTS $APPLICATION_OPTS ${APPLICATION_OPTS_MAP[$jarSimpleName]} -jar $APPLICATION > $APPLICATION_LOG 2>&1 &
    # 查看启动日志
#    tail -f $APPLICATION_LOG
fi
四)spring-stop.sh 需要修改以下内容
    应用前缀名称
    APPLICATION_PRE_NAME=
spring-stop.sh 脚本
#!/bin/bash
jarSimpleName=$1
APPLICATION_NAME="${SPRING_SH_APPLICATION_PRE_NAME}${jarSimpleName}.jar"
APPLICATION_PID=`jps | grep ${APPLICATION_NAME} | awk '{print $1}'`
if [[ "$APPLICATION_PID" != "" ]];then
    kill $APPLICATION_PID
    echo -e "33[34m 应用: ${jarSimpleName}停止成功33[0m"
else
   echo -e "33[31m 不存在应用:${jarSimpleName}的进程 33[0m"
fi
五)spring-log.sh 需要修改以下内容
    应用前缀名称
    APPLICATION_PRE_NAME=定义应用 jar 存放的目录
    APPLICATION_FILE=
#!/bin/bash
jarSimpleName=$1
APPLICATION_FILE=$SPRING_SH_APPLICATION_FILE
APPLICATION_LOG=$APPLICATION_FILE/logs/${SPRING_SH_APPLICATION_PRE_NAME}${jarSimpleName}.log
tail -f $APPLICATION_LOG

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号