sell启停脚本(一键全部,单个,多个应用)

一,应用启用脚本(一键全部,单个,多个应用)

脚本名称: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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值