背景:如下脚本实现当微服务重启后,检查微服务的启动端口正常,可通过轮询的方式来实现
所需要用到配置文件config.properties信息如下:

onlineService:8001
algorthService:8002
recallService:8003
sortService:8004

实现方案:定义一个flag标记与重试的次数,使用do-while循环,当检查命令执行成功、或者达到重试最大次数时终止,

代码如下:

if [ "X${whoami}" != "Xbk" ];then
{
echo "current user i not bk"
exit 1
}
fi #修改配置
for service in `cat config.properties|awk -F ':' '{print $1}'`;
do
sed -i "s#^ name:{{getv.*#name:test#g" /opt/easyconf/etc/bk/$service/config.yaml
sed -i "s#^ regoin:{{getv.*#regoin:delivery#g" /opt/easyconf/etc/bk/$service/config.yaml
sed -i "s#^ availableZone:{{getv.*#availableZone:online#g" /opt/easyconf/etc/bk/$service/config.yaml
echo "$service的easyconf下microservice文件修改成功"
done
echo "等待60s,easyconf同步时间" #重启
for service in in `cat config.properties|awk -F ':' '{print $1}'`;
do
#echo /opt/bk/$service/browser-$service/bin
sh /opt/bk/$service/$service/bin/start.sh > /dev/null 2>&1
echo "${service}服务开始重启"
done #循环检查5次
#循环检查5次
echo "等待60s,验证服务状态,最多重试间隔10s*5次"
sleep 60
count = 0 #记录重试次数
flag = 0 #重试标识,flag=0表示任务正常,flag=1表示需要进行重试
for i in `cat config.properties|awf -F ':' '{print $1}'`;done
i1 = `echo "$i"|awk -F ':' '{print $1}'`
i2 = `echo "$i"|awk -F ':' '{print $2}'`
while [ 0 -eq 0]
do
echo "....................job begin check-${i1}服务....................."
#.....添加要执行的内容,flag的值在这个逻辑中更改为1,或者不变..........
netstat -ntpl |grep ${i2} > /dev/null 2>&1
flag = $?
#检查和重试过程
if [ $flag -eq 0 ];then#执行成功,不重试
echo "....................job complete(${i1}服务重启成功................."
break;
else #执行失败,重试
count = $[${count}+1]
if [ ${count} -eq 5];then #执行重试次数,重试超过5次即失败
echo 'timeout,exit.'
break
fi
echo "....................retry ${count} in 10 seconds................."
sleep 10
fi
done
done
echo "执行成功,微服务均配置与重启成功"

shell编写循环检查脚本的更多相关文章

  1. Linux shell编写端口扫描脚本

    Linux shell编写端口扫描脚本 需求: 扫描特定主机 扫描特定主机的特定端口 扫描特定网段 扫描特定网段中哪些主机开放了特定的端口 源码如下: #/bin/bash #该脚本用于对特定目标主机 ...

  2. shell编写一个判断脚本

                                                              shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...

  3. 用Shell编写项目发布脚本

    1.首先在github上创建一个测试用的仓库 2.本地编写一个可以运行的测试项目,上传至github 3.链接服务器,编写脚本如下:注意:编写前需要在服务器上安装git和maven 执行build_c ...

  4. shell编写redis启动脚本

    ​ 安装后redis,默认系统不会自启动,如果关机或重启redis不会自行启动,linux下/etc/init.d/目录下基本上存放所有系统的大多数的启动脚本,放在这个目录下的脚本可以实现自启动操作. ...

  5. shell脚本编程学习笔记(三)编写邮件报警脚本

    一.shell编写邮件报警脚本 1.POSTFIX邮件服务器准备 a.首先卸载服务器上自带的sendmail rpm -qa sendmail* //查看安装的sendmail rpm -e send ...

  6. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  7. shell编写一个批量添加用户脚本

                                                          shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...

  8. shell编程下 特殊变量、test / [ ]判断、循环、脚本排错

    第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~]# cat /server/scripts/show2.sh #!/bin/ ...

  9. 【转】shell编程下 特殊变量、test / [ ]判断、循环、脚本排错

    [转]shell编程下 特殊变量.test / [ ]判断.循环.脚本排错 第1章 shell中的特殊变量 1.1 $# $# 表示参数的个数 1.1.1 [示例]脚本内容 [root@znix ~] ...

  10. Android Monkey 脚本编写与检查内存泄露

    一.Monkey脚本编写 1.Monkey脚本格式 脚本优势: 简单快捷,不需要接触任何工具,只需要一个记事本文件 脚本缺点: 实现坐标.按键等基本操作的相应步骤,顺序脚本无逻辑性 脚本源码: \de ...

随机推荐

  1. CentOS7下yum安装GitLab-CE

    前提准备 建立git用户 useradd git 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 安装依赖库 yum instal ...

  2. 【前端必会】tapable、hook,webpack的灵魂

    背景 什么是tapable.hook,平时做vue开发时的webpack 配置一直都没弄懂,你也有这种情况吗? 还是看源码,闲来无聊又看一下webpack的源码,看看能否找到一些宝藏 tapable和 ...

  3. ERP是什么呢?

    ERP(Enterprise Resource Planning,企业资源计划)系统,是进行物质资源.资金资源和信息资源集成一体化管理的企业信息管理系统,ERP统领企业全局,为管理层服务,重心在于企业 ...

  4. C++面向对象编程之虚函数与多态和继承和复合下的构造和析构

    1.对于非虚函数,是不希望派生类对该函数重新定义: 对于virtual函数,在父类已经有默认定义后,并希望子类重新定义它: 对于pure virtual函数,父类没有默认定义,派生类必须要重新定义它: ...

  5. HDU2196 Computer (树形DP-换根)

    dp[u][0]表示u向下走的最大距离: dp[u][1]表示u向下走的次大距离: dp[u][2]表示u向上走的最大距离: 最后的答案就是每个点的max(dp[u][0],dp[u][2]); 求解 ...

  6. 带你读AI论文丨ACGAN-动漫头像生成

    摘要:ACGAN-动漫头像生成是一个十分优秀的开源项目. 本文分享自华为云社区<[云驻共创]AI论文精读会:ACGAN-动漫头像生成>,作者:SpiderMan. 1.论文及算法介绍 1. ...

  7. Maximum Entropy Population-Based Training for Zero-Shot Human-AI Coordination

    原文:https://www.cnblogs.com/Twobox/p/16791412.html 熵 熵:表述一个概率分布的不确定性.例如一个不倒翁和一个魔方抛到地上,看他们平稳后状态.很明显,魔方 ...

  8. CQOI2015任务查询系统

    题目链接 主席树. 把区间的影响挂在左端点与右端点,建树时顺便对应的插入与删除. 维护一段值域区间的和与数字个数,查询时要注意与第k大的数相同的数可能有很多. 复杂度O(nlogn) #include ...

  9. GO编译时不避免引入外部动态库的解决方法

    简介 最近碰到一个问题,有一个流量采集的组件中使用到了github.com/google/gopacket 这个库,这个库使用一切正常,但是唯独有一个缺点,编译后的二进制文件依赖于libpcap.so ...

  10. Go | 基本数据类型详解

    前言 基本数据类型,变量存的就是值,也叫值类型.每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间. Printf 和 Println 的区别 printf 输出后不换行, print ...