阿里云实践 - Springboot服务启停脚本(批量)

场景:

        因自己这边接活,需要多节点部署服务,且应用节点以后可扩。自己每次部署更新都要全部操作一遍所有端口的服务,太费事。

        故:自己参考资料整理了一套执行脚本,只要在一个文件中指定所有端口号,就可以一次性操作多个服务,并可以在执行命令时指定某些端口来操作服务。

        当然:现在有很多自动化部署的东西,但我就一开发,简单弄弄接接活就好。

脚本:

         脚本我拆分成2个文件:runner.sh(公用,封装操作逻辑)、wc-org-tenant.sh  (根据项目名称自定义,指定一些个性化参数)

         逻辑:核心思想就是在wc-org-tenant.sh中指定:DEFAULT_PORT=8880,8881,即我们要批量操作的端口号,然后根据执行命令来批量操作。

          执行命令:// .sh文件后面的第一个参数(红色)为执行命令,第二个参数(绿色)为执行端口

                 批量重启所有默认端口的服务:sh wc-org-tenant.sh restart 

                 批量启动所有默认端口的服务:sh wc-org-tenant.sh start 

                 批量停用所有默认端口的服务:sh wc-org-tenant.sh stop 

                 批量重启指定端口的服务:sh wc-org-tenant.sh restart  8881,8882,8883,8884

                 批量启动指定端口的服务:sh wc-org-tenant.sh start     8881,8882,8883,8884

                 批量停用指定端口的服务:sh wc-org-tenant.sh stop     8881,8882,8883,8884

runner.sh://java -jar那行是运行自己的java服务,后面的参数也是服务需要,大家看自己的需求来改自己的启动命令,我这里是java运行springboot

#执行运行命令
command=$1
#指定操作端口
PORT=$2

function start(){
  tpid=`netstat -ltnp |grep java | egrep ":::$1|0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
  if [ "${tpid}" ]; then
    echo "启动:失败,服务端口已经运行:$1";
  else
    echo "启动:开始启动服务端口:$1";
    rm -f tpid
    java -jar ${APP_NAME} --server.port=$1 --spring.profiles.active=test  --eureka.client.service-url.defaultZone=http://${EUREKA_IP}/eureka/eureka --eureka.instance.ip-address=${CLIENT_IP} &
    echo $! > tpid
    sleep 15
    check $1
  fi
}
function stop(){
  tpid=`netstat -ltnp |grep java | egrep ":::$1|0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
  echo "停止:开始停用服务端口:$1";
  if [ "${tpid}" ]; then
    kill -15 $tpid;
    #暂停5秒,等待结束
    sleep 5
    #再次检测进程是否杀死
    tpid=`netstat -ltnp |grep java | egrep ":::$1|0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
    if [ "${tpid}" ]; then
      echo "停止:强制停止服务端口:$1";
      kill -9 $tpid;
      sleep 5
    fi
    check $1
  else
    echo "停用:忽律,服务端口未运行:$1";
  fi
}
function check(){
   tpid=`netstat -ltnp |grep java | egrep ":::$1|0.0.0.0:$1" |awk '{print $7}' | awk -F/ '{print $1}'`
   if [ "${tpid}" ]; then echo "检测:服务端口运行中:$1"; else echo "检测:服务端口已停用:$1"; fi
}

#如果命令行没有指定执行的端口,就执行默认端口
if [ ! "$PORT" ]; then
  #echo "###未输入端口,默认处理端口 => ${DEFAULT_PORT}"
  PORT="${DEFAULT_PORT}"
fi
echo ">>>>>>>>>>>>>>>>>>执行脚本-开始 执行命令 => ${APP_NAME} ${command} ${PORT}"

#开始循环处理命令任务
for i in `echo ${PORT} | sed 's/,/ /g'`
do
  echo -e "\n============> 开始处理服务端口 ${command}:${i}"
  if [ "${command}" ==  "start" ]; then
    start $i
  elif [ "${command}" ==  "stop" ]; then
    stop $i
  elif [ "${command}" ==  "restart" ]; then
    stop $i
    start $i
  else
    echo "无效的执行命令参数 => ${command}"
  fi
  echo "<============ 已处理完毕服务端口 ${command}:${i} "
done
echo -e "\n<<<<<<<<<<<<<<<<<<执行脚本-结束 执行命令 => ${APP_NAME} ${command} ${PORT}"

   

wc-org-tenant.sh : 因为自己项目启动时候需要指定EUREKA的IP地址,所以这里有相关IP配置,在runner.sh中有体现,大家根据自己需要调整

#!/bin/sh
APP=wc-org-tenant
APP_NAME=${APP}".jar"
#默认进行操作的端口服务(可以不要,根据自己需求来)
CLIENT_IP=116.*.*.86
EUREKA_IP=116.*.*.86
#默认端口
DEFAULT_PORT=8880,8881
#导入公共模块
. ./runner.sh

重启8880端口的服务

重启完毕 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WJL_MGQS

本不富裕的收入,还得买服务器

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值