一、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 "\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 需要修改以下内容
- 定义应用 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 "\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 需要修改以下内容
- 应用前缀名称
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 需要修改以下内容
- 应用前缀名称
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