ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

阿里云实践-批量运行/重启/停止端口服务的脚本

2021-07-16 19:02:18  阅读:173  来源: 互联网

标签:服务 批量 tpid 重启 端口 echo sh PORT


场景:

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

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

脚本:

         脚本我拆分成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 |grep "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 |grep "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 |grep "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 |grep "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端口的服务

重启完毕 

阿里云代金劵链接:https://www.aliyun.com/minisite/goods?userCode=eav1eps6

标签:服务,批量,tpid,重启,端口,echo,sh,PORT
来源: https://blog.csdn.net/WJL_MGQS/article/details/118815138

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有