其他分享
首页 > 其他分享> > 阿里云实践-批量运行/重启/停止端口服务的脚本

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

作者:互联网

场景:

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

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

脚本:

         脚本我拆分成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