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

1 篇文章 0 订阅
1 篇文章 0 订阅
一、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 需修改以下内容
  1.  指定命令别名
    command_alias=
  2. 定义应用 jar 存放的目录
    APPLICATION_FILE=
  3. 应用前缀名称
    APPLICATION_PRE_NAME=
  4. 定义启动脚本
    start_sh_path=
  5. 定义停止脚本
    stop_sh_path=
  6. 定义查看日志脚本
    log_sh_path=
  7. 支持的应用简称集 (请按照启动顺序排列, 建议将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 "\033[31m 传入应用: ${jarSimpleName} 不受支持 \033[0m"
        echo -e "\033[33m 支持的应用:${applications_str} \033[0m"
        conditionSuccess=1
    fi
else
    echo -e "\033[31m 请传入一个应用名称 \033[0m"
    echo -e "\033[33m 支持的应用:${applications_str} \033[0m"
    conditionSuccess=1
fi
 
# 判断传入的指令是否为空,并检查是否存在于定义的指令集中
if [ "$direct" = "" ];then
    echo -e "\033[31m 请传入指令 \033[0m"
    echo -e "\033[33m 支持的指令:${directs_str} \033[0m"
    conditionSuccess=1
elif [[ ! "${directs[@]}"  =~ "${direct}" ]]; then
    echo -e "\033[31m 请传入正确的指令 \033[0m"
    echo -e "\033[33m 支持的指令:${directs_str} \033[0m"
    conditionSuccess=1
fi
 
# 判断最终是否通过命令合法性检测,若合法性成功标识值不为0 则认为未通过命令合法性检查
if [ ! "$conditionSuccess" = "0" ];then
    echo -e "\033[33m 命令:${command_alias} {${applications_str}} {${directs_str}}\n\033[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 "\033[33m 开始启动应用:${item}\033[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 "\033[33m 应用:${item} 启动完成!!!\033[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 "\033[33m PID:$APPLICATION_PID 应用 $item 处于运行中....\033[0m"
                else
                    echo -e "\033[31m PID:为空 应用 $item 已停止运行!!!\033[0m"
                fi
            done
        else
            APPLICATION_PID=`jps | grep ${APPLICATION_PRE_NAME}${jarSimpleName} | awk '{print $1}'`
            if [ "$APPLICATION_PID" != "" ];then
                echo -e "\033[33m PID:$APPLICATION_PID 应用 $jarSimpleName 处于运行中....\n\033[0m"
            else
                echo -e "\033[31m PID:为空 应用 $jarSimpleName 已停止运行!!!\n\033[0m"
            fi
        fi
    ;;
 
    *)
        echo -e "\033[33m ${command_alias} 应用名称 指令 \033[0m"
        echo -e "\033[33m 支持的应用:${applications_str} \033[0m"
        echo -e "\033[33m 支持的指令:${directs_str} \033[0m"
        echo -e "\033[33m 命令:${command_alias} {${applications_str}} {${directs_str}}\033[0m"
        echo -e "\033[33m 示例:启动 user 服务执行命令 --> ${command_alias} user start \n\033[0m"
esac
二)spring-start.sh 需要修改以下内容
  1. 定义应用 jar 存放的目录
    APPLICATION_FILE=
  2. 应用前缀名称
    APPLICATION_PRE_NAME=
  3. 通用的Java 参数
    JAVA_OPTS=
  4. 通用的应用参数
    APPLICATION_OPTS=
  5. 定义各个应用的个性化启动参数
    例如: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 "\033[31m 应用: ${jarSimpleName} 处于运行状态,无需再次启动...\033[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 需要修改以下内容
  1. 应用前缀名称
    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 "\033[34m 应用: ${jarSimpleName}停止成功\033[0m"
else
   echo -e "\033[31m 不存在应用:${jarSimpleName}的进程 \033[0m"
fi
五)spring-log.sh 需要修改以下内容
  1. 应用前缀名称
    APPLICATION_PRE_NAME=
  2. 定义应用 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值