一,应用启用脚本(一键全部,单个,多个应用)
脚本名称:start.sh
#!/bin/bash
#主目录:如果需要在其他目录则修改此项
#目录自動生成
JAR_MAIN="/opt"
if [[ ! -d "$JAR_MAIN/test" ]]; then
mkdir $JAR_MAIN/test
fi
#注册中心目录创建(存放启动jar包)
if [[ ! -d "$JAR_MAIN/test/registry" ]]; then
mkdir $JAR_MAIN/test/registry
fi
#网关目录创建(存放启动jar包)
if [[ ! -d "$JAR_MAIN/test/gateway" ]]; then
mkdir $JAR_MAIN/test/gateway
fi
#work创建(存放启动jar包)
if [[ ! -d "$JAR_MAIN/test/work" ]]; then
mkdir $JAR_MAIN/test/work
fi
#日志
if [[ ! -d "$JAR_MAIN/logs" ]]; then
mkdir $JAR_MAIN/logs
fi
# 系统模块
PORTS=(8065 8066 8067)
# 系统模块(改成相应的应用模块)
MODULES=(registry gateway work)
# 系统模块名称(改成相应的应用模块)
MODULE_NAMES=(注册中心 网关 work)
#配置文件jvm大小
JVM_OPTIONS="-Xms1024m -Xmx1024m"
#路径信息
DEPLOY_DIR="$JAR_MAIN/test"
#輸入的參數(可以一個或者多個)
command="$@"
MODULE=
MODULE_NAME=
JAR_NAME=
commandOk=0
count=0
okCount=0
port=0
LOG_FILE="$JAR_MAIN/test/logs/${PROJECT}.log"
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
#根据关键字获取自定目录下最新(最新时间)jar包
JAR_NAME=`ls -lt /$DEPLOY_DIR/$MODULE/ |grep $MODULE |head -n 1 |awk '{print $9}'`
JAR_PATH=$JAR_MAIN/test/$MODULE
LOG_FILE="$JAR_MAIN/logs/$MODULE.log"
PORT=${PORTS[$i]}
#传入的多个值是否包含本模块
if [[ "$command" == "all" ]] || [[ "$command" == *"$MODULE"* ]];then
commandOk=1
count=0
#根据JAR_NAME 获取进程id
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:已经运行,PID=$PID"
else
#starting project
#输出应用启动时间
echo "[`date '+%Y-%m-%d %H:%M:%S'`] starting "$MODULE
#从外部读取配置文件--spring.config.location=$JAR_MAIN/test/$MODULE/application.yml
nohup /data/galaxy/jdk17/bin/java -jar $JAR_PATH/$JAR_NAME --spring.config.location=$JAR_MAIN/test/$MODULE/application.yml >>$LOG_FILE 2>&1 &
#指定jvm大小启动
#nohup java $JVM_OPTIONS -jar $JAR_PATH/$JAR_NAME --spring.config.location=$JAR_MAIN/test/application.yml >>$LOG_FILE 2>&1 &
PID=`ps -ef | grep \$JAR_PATH\/\$JAR_NAME | grep -v grep | awk '{print $2}'`
while [ -z "$PID" ]
do
if (($count == 60));then
echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
break
fi
count=$(($count+1))
echo "$MODULE_NAME启动中.................."
sleep 10s
pid=`ps -ef | grep \$JAR_PATH\/\$JAR_NAME | grep -v grep | awk '{print $2}'`
done
okCount=$(($okCount+1))
echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
fi
fi
done
if(($commandOk == 0));then
echo "请输入参数:all/registry|gateway|work"
else
echo "............本次共启动:$okCount个服务..........."
fi
#1,启动所有jar包:sh proj.sh all 或者./sh all
#2,启用单个或多个jar包,只需要将all替换为相应的模块代码就行,例如停止多个:sh proj.sh work registry,单个sh proj.sh work
二, 应用停用脚本(一键全部,单个,多个应用)
脚本名称:stop.sh
#!/bin/bash
#主目录:如果需要在其他目录则修改此项
JAR_MAIN="/opt"
#路径信息
DEPLOY_DIR="$JAR_MAIN/test"
# 系统模块
MODULES=(registry gateway work)
# 系统模块名称
MODULE_NAMES=(注册中心 网关 worke)
command="$@"
MODULE=
MODULE_NAME=
JAR_NAME=
commandOk=0
okCount=0
isAccount=0
echo "$command"
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=`ls -lt /$DEPLOY_DIR/$MODULE/ |grep $MODULE |head -n 1 |awk '{print $9}'`
if [[ "$command" == "all" ]] || [[ "$command" == *"$MODULE"* ]];then
commandOk=1
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
kill -9 $PID
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -n "$PID" ]
do
sleep 3s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
echo "$MODULE---$MODULE_NAME:成功结束"
okCount=$(($okCount+1))
else
echo "$MODULE---$MODULE_NAME:未运行"
fi
fi
done
if (($commandOk == 0));then
echo "请输入参数:registry|gateway|work"
else
echo "............本次共停止:$okCount个服务............"
fi
#1,停止所有jar包:sh proj.sh all 或者./sh all
#2,停止单个或多个jar包,只需要将all替换为相应的模块代码就行,例如停止多个:sh proj.sh work registry,单个sh proj.sh work
上边是将启停脚本拆分为俩个来写,也可以只写一个脚本来实现启停
三,应用启用,停用,重启脚本(一键全部,单个,多个应用)
#项目部署根目录
JAR_MAIN="/opt"
#jdk安装路径
JKD_PATH="/opt/jdk17"
# 系统模块
PORTS=(8065 8066 8067 7010 9010 7000)
# 系统模块
MODULES=(registry gateway worker solar ipam sun)
# 系统模块名称
MODULE_NAMES=(注册中心 网关 WORKER 基础平台 ipam 前端)
#路径信息
DEPLOY_DIR="$JAR_MAIN/test"
start(){
if [[ ! -d "$JAR_MAIN/test" ]]; then
mkdir $JAR_MAIN/test
fi
#注册中心目录创建
if [[ ! -d "$JAR_MAIN/test/registry" ]]; then
mkdir $JAR_MAIN/test/registry
fi
#网关目录创建
if [[ ! -d "$JAR_MAIN/test/gateway" ]]; then
mkdir $JAR_MAIN/test/gateway
fi
if [[ ! -d "$JAR_MAIN/test/work" ]]; then
mkdir $JAR_MAIN/test/work
fi
local command="$@"
local MODULE=
local MODULE_NAME=
local JAR_NAME=
local commandOk=0
local count=0
local okCount=0
local port=0
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=`ls -lt $DEPLOY_DIR/$MODULE/ |grep $MODULE |head -n 1 |awk '{print $9}'`
JAR_PATH=$JAR_MAIN/test/$MODULE
PORT=${PORTS[$i]}
#传入的多个模块是否包含本模块
if [[ "$command" == "all" ]] || [[ "$command" == *"$MODULE"* ]];then
commandOk=1
count=0
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:已经运行,PID=$PID"
else
#starting project
#输出应用启动时间
echo "[`date '+%Y-%m-%d %H:%M:%S'`] starting "$MODULE
nohup $JKD_PATH/bin/java -jar $JAR_PATH/$JAR_NAME > $JAR_PATH/nohup.out 2>&1 &
PID=`ps -ef | grep \$JAR_PATH\/\$JAR_NAME | grep -v grep | awk '{print $2}'`
while [ -z "$PID" ]
do
if (($count == 60));then
echo "$MODULE---$MODULE_NAME:$(expr $count \* 10)秒内未启动,请检查!"
break
fi
count=$(($count+1))
echo "$MODULE_NAME启动中.................."
sleep 10s
pid=`ps -ef | grep \$JAR_PATH\/\$JAR_NAME | grep -v grep | awk '{print $2}'`
done
okCount=$(($okCount+1))
echo "$MODULE---$MODULE_NAME:已经启动成功,PID=$PID"
fi
fi
done
if(($commandOk == 0));then
echo "请输入第二个参数:registry|gateway|work"
else
echo "............本次共启动:$okCount个服务..........."
fi
}
stop() {
local command="$@"
local MODULE=
local MODULE_NAME=
local JAR_NAME=
local commandOk=0
local okCount=0
local isAccount=0
for((i=0;i<${#MODULES[@]};i++))
do
MODULE=${MODULES[$i]}
MODULE_NAME=${MODULE_NAMES[$i]}
JAR_NAME=`ls -lt $DEPLOY_DIR/$MODULE/ |grep $MODULE |head -n 1 |awk '{print $9}'`
if [[ "$command" == "all" ]] || [[ "$command" == *"$MODULE"* ]];then
commandOk=1
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ];then
echo "$MODULE---$MODULE_NAME:准备结束,PID=$PID"
kill -9 $PID
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
while [ -n "$PID" ]
do
sleep 3s
PID=`ps -ef |grep $(echo $JAR_NAME | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'`
done
echo "$MODULE---$MODULE_NAME:成功结束"
okCount=$(($okCount+1))
else
echo "$MODULE---$MODULE_NAME:未运行"
fi
fi
done
if (($commandOk == 0));then
echo "请输入参数:registry|gateway|worker|solar|ipam|fara-runtime|fara-batch|sun-runtime"
else
echo "............本次共停止:$okCount个服务............"
fi
}
case "$1" in
start)
start "$2"
;;
stop)
stop "$2"
;;
restart)
stop "$2"
sleep 3s
start "$2"
;;
*)
echo "第一个参数请输入:start|stop|restart"
exit 1
;;
esac
#1,启动所有jar包:sh proj.sh start all 或者./sh start all
#2,停止所有jar包:sh proj.sh stop all 或者./sh stop all
#3,重启所有jar包:sh proj.sh restart all 或者./sh restart all
#4,启动,重启或者停止单个或多个jar包,只需要将all替换为相应的模块代码就行,例如停止多个:sh proj.sh start work registry,单个sh proj.sh start work
注:将脚本上传到服务器如有报错执行:sed -i ‘s/\r//g’ start.sh