adb echo shell 覆盖_一次写shell脚本的经历记录

    点击上方“我的小碗汤”,选择“置顶公众号”

精品文章,第一时间送达

66b36a89a5be3fbffb5f3964d5e3c97d.png

redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要重启。所以把redis集群的状态检查放到了健康检查中,依赖statefulset的原生能力(pod实例ready后才重启下一个,readyendpoints controllerpod信息更新到endpoints资源对象中),而没有在redis operator中写逻辑去判断。

需要用redis-cli -h {redis实例IP} ping查看redis是否正常,同时用redis-cli -c -h {redis实例IP} -a {redis密码} cluster info输出的信息解析cluster_state的值是否为ok,以及cluster_known_nodes的值是否为1,判断redis集群是否正常;

  • 如果redis集群刚创建,cluster_known_nodes1cluster_statefail;

  • 如果redis集群为纵向扩容(扩CPU、内存)升级重启,cluster_known_nodes不为1,cluster_stateok时才认为集群正常,才能重启下一个pod

因为涉及到字符串相等判断,所以用以下这样判断:

if [ "$cluster_known_nodes"x = "1"x  ]; then.....fi

但是判断一直有问题,如下图,在$a后面加个x,会变为在开头覆盖式的加a结果就是判断结果不相等。

1816cb698bc354632e36d99391b0cabc.png

redis-cli -c -h {redis实例IP} -a {redis密码} cluster info执行的结果重定向到文件里。

vi 1.txt查看文件,在vi里用set ff命令查看文件格式为unix,但是文件每一行后面都有一个^M的特殊字符,这就是问题所在了。

bf768cfbac8e44fa9e7ddb13e483c1d1.png

最主要是通过cat都看不出来特殊字符的存在。

ec95e4bca33f18976030903fadc450db.png

手动把^M特殊字符删掉就好了。

f81469201f09aa361f25900f8ddb0faa.png

网上说^Mwindows格式文本文件的换行符\r\n,可以用dos2unix命令转为unix格式。但是执行cluster info命令全程在linux中操作,而且重定向到文件中set ff命令看到也是unix格式。这点还是很费解。

先用sed命令将^M换掉,试了sed  's/^M//g'没有用,所以选择用sed 's?\r??g'替换,最终脚本如下。

if语句的[[]]需要用bash执行,用sh执行会报错[[: not found

#!/bin/bash#需要用redis-cli -h {redis实例IP} ping查看redis是否正常#用redis-cli -c -h {redis实例IP} -a {redis密码} cluster info输出#的信息解析cluster_state的值是否为ok,以及cluster_known_nodes的值是#否为1,判断redis集群是否正常;如果redis集群刚创建,cluster_known_nodes#为1,cluster_state为fail;如果redis集群为纵向扩容(扩CPU、内存)升级重启#cluster_known_nodes不为1,cluster_state为ok时才认为集群正常,才能重启#下一个pod,改健康检查脚本旨在维护升级时redis集群状态,不在operator中维护# 利用好statefulset一个实例ready后重启下一个pod的特性pingres=$(redis-cli -h $(hostname) ping)# cluster_state:ok# cluster_slots_assigned:16384# cluster_slots_ok:16384      # cluster_slots_pfail:0        # cluster_slots_fail:0        # cluster_known_nodes:6        # cluster_size:3                # cluster_current_epoch:15      # cluster_my_epoch:12          # cluster_stats_messages_sent:270782059# cluster_stats_messages_received:270732696pingres=$(echo "${pingres}" | sed 's?\r??g')if [[ "$pingres"x = "PONG"x ]]; then    clusterinfo=$(redis-cli -c -h ${PODIP} cluster info)    # redis-cli -c -h ${PODIP} cluster info output info include ^M(win \n\r) char lead to error, so use sed 's?\r??g'    clusterknownnodes=$(echo "${clusterinfo}" | grep cluster_known_nodes | sed 's?\r??g' | awk -F ':' '{print $2}')    clusterstate=$(echo "${clusterinfo}" | grep cluster_state | sed 's?\r??g' | awk -F ':' '{print $2}')    echo "clusterknownnodes: ${clusterknownnodes} --- clusterstate: ${clusterstate}"    # [[ need run this script use /bin/bash instead of /bin/sh    # if语句的[[]]需要用bash执行,用sh执行会报错[[: not found    if [[ "${clusterknownnodes}"x = "1"x && "${clusterstate}"x = "ok"x ]]; then        echo "--1--"        exit 0    elif [[ "${clusterknownnodes}"x != "1"x && "${clusterstate}"x = "ok"x ]]; then        echo "--2--"        exit 0    # create redis cluster    elif [[ "${clusterknownnodes}"x = "1"x && "${clusterstate}"x != "ok"x ]]; then        echo "--3--"        exit 0    elif [[ "${clusterknownnodes}"x != "1"x && "${clusterstate}"x != "ok"x ]]; then        echo "--4--"        exit 1    else        echo "--5--"        exit 1    fielse    exit 1fi

一般这种怪异的问题都是脚本里有特殊字符造成的,可以在脚本中set list显示特殊字符。当然windows上编辑过的脚本在linux上运行一般dos2unix test.sh这样转换一下最好,免的遇到麻烦。

参考:

shell中括号的特殊用法 linux if多条件判断

https://www.cnblogs.com/jjzd/p/6397495.html

运行shell脚本时报错"[[ : not found"解决方法

https://www.cnblogs.com/han-1034683568/p/7211392.html

 • end • 


本公众号免费提供csdn下载服务,海量IT学习资源,如果你准备入IT坑,励志成为优秀的程序猿,那么这些资源很适合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大数据、面试资料、前端 等资源。同时我们组建了一个技术交流群,里面有很多大佬,会不定时分享技术文章,如果你想来一起学习提高,可以公众号后台回复【2】,免费邀请加技术交流群互相学习提高,会不定期分享编程IT相关资源。


扫码关注,精彩内容第一时间推给你

ddcc6bad2ab532a56c456440eaaec419.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当新零售遇上 Serverless

简介: Serverless 的出现给传统企业数字化转型带了更多机遇。 某零售商超行业的龙头企业,其主要业务涵盖购物中心、大卖场、综合超市、标准超市、精品超市、便利店及无人值守智慧商店等零售业态,涉及全渠道零售、仓储物流、餐饮、消费服务、…

如果还不懂如何使用 Consumer 接口,就来看这篇!

作者 | 阿Q来源 | 阿Q说代码背景在开发过程中我遇到这么一个问题:表结构:一张主表A ,一张关联表B ,表 A 中存储着表 B 记录的状态。场景:第一步创建主表数据,插入A表;第二步调用第三方接口插入B…

京东:Flink SQL 优化实战

简介: 本文着重从 shuffle、join 方式的选择、对象重用、UDF 重用等方面介绍了京东在 Flink SQL 任务方面做的优化措施。 本文作者为京东算法服务部的张颖和段学浩,并由 Apache Hive PMC,阿里巴巴技术专家李锐帮忙校对。主要内容为&#xff1…

Spring Boot参数校验以及分组校验的使用

简介: 做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句。虽然这种方式简单直接,但会大大降低开发效率和代码可读性。所以我们可以使用…

长文解析:作为容器底层技术的半壁江山, cgroup如何突破并发创建瓶颈?

简介: io_uring 作为一种新型高性能异步编程框架,代表着 Linux 内核未来的方向,当前仍处于快速发展中。阿里云联合 InfoQ 发起《io_uring 介绍及应用实践》的技术公开课,围绕 OpenAnolis 龙蜥社区 Anolis OS 8 全方位解析高性能存…

Orion:谷歌的新一代SDN控制器

作者 | 魏煌松来源 | 鲜枣课堂时至今日,谷歌在2015年公布的成果,“利用SDN将广域网带宽利用率提升至接近100%”,仍然是SDN的一个标杆案列,也是难以逾越的巅峰。但事实上,当时使用的SDN控制器Onix,早已退出了…

移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统

简介: 2020年12月CentOS项目组宣布CentOS 8将于2021年12月31日结束支持,这意味着从2022年开始,使用CentOS 8的用户,将无法得到来自官方的新硬件支持、bug修复和安全补丁。针对这一情况,移动云大云操作系统团队基于国内…

干掉讨厌的 CPU 限流,让容器跑得更快

简介: 让人讨厌的 CPU 限流影响容器运行,有时人们不得不牺牲容器部署密度来避免 CPU 限流出现。本文介绍的 CPU Burst 技术可以帮助您既能保证容器运行服务质量,又不降低容器部署密度。文章分为上下两篇,该文为上篇,下…

微弱信号检测_机动车检测线常用传感器介绍

机动车检测线中经常会运用到各种传感器,这些传感器相当于车辆检测系统的“眼睛”、“鼻子”和“耳朵”,通过台体装置和装在台体中的传感器,能够把车辆的性能数据转换成计算机系统能够识别的信号,供计算机处理和计算,最…

赋能开发者,英特尔发布oneAPI 2022工具包

英特尔发布了oneAPI 2022工具包。此次发布的最新增强版工具包扩展了跨架构开发的特性,为开发者提供更强的实用性和更丰富的架构选择,用以加速计算。 英特尔公司首席技术官、高级副总裁、软件和先进技术事业部总经理 Greg Lavender表示:“我十…

Quick BI V4.0功能“炸弹”来袭,重磅推出即席分析、模板市场、企业微信免密登录等强势功能

简介: 2021年7月,Quick BI公共云版本迭代新功能:重磅推出即席分析、模板市场,分析门槛再降低;推出企业微信无缝对接,移动端类目个性配置及管理提升多端能力;数据建模配置交互升级至拖拽模式提升…

打印速度快点的打印机_瞒着领导偷偷给你们发两台打印机

前几次小粉笔组织的活动都被“投诉”!说我们打印机太少~小粉笔心领神会,在这个月的活动预算费用上悄咪咪加了【两台打印机】~(看小粉笔多疼你们!)希望知道的笔芯不要把这条推文转发给我领导(要不然你们以后就没有打印机了~哼!)现在…

数据库误操作后悔药来了:AnalyticDB PostgreSQL教你实现分布式一致性备份恢复

简介: 本文将介绍AnalyticDB PostgreSQL版备份恢复的原理与使用方法。 一、背景 AnalyticDB PostgreSQL版(简称ADB PG)是阿里云数据库团队基于PostgreSQL内核(简称PG)打造的一款云原生数据仓库产品。在数据实时交互式…

与变异风险词赛跑 阿里探索AI治理网络风险

最近,阿里安全一线风控小二可粒发现,在禁售的风险防控库里,有人试图“上新”新品种,不法份子借助在社交媒体上走红的“魔法改运”等说辞,引人入玄学骗局。 尽量提前发现风险问题,提早布防是阿里安全风控部…

高效研发运维体系构建的流程和方法论

简介: 云计算产品大多都会与云原生发生关联,云原生正在重塑整个软件的生命周期。但到底什么是云原生?云原生带来的最大技术创新和未来机会是什么?围绕云原生,是否可以构建出一套云上的开发&运维体系,打…

Colima:MacOS 上的极简容器运行时和 Kubernetes

作者 | Addo Zhang来源 | 云原生指北Colima 是一个以最小化设置来在MacOS上运行容器运行时和 Kubernetes 的工具。支持 m1,同样也支持 Linux。Colima 的名字取自 Container on Lima。Lima 是一个虚拟机工具,可以实现自动的文件共享、端口转发以及 contai…

当容器应用越发广泛,我们又该如何监测容器?

简介: 随着容器技术蓬勃发展与落地推行,越来越多企业的业务运行于容器中。作为主流部署方式之一,容器将团队的任务和关注点分割开,开发团队只需关注应用程序逻辑和依赖项,而运维团队只需关注部署和管理,无需…

内含福利|CSDN携手字节跳动:云原生Meetup北京站报名热烈启动,1月8日见!

伴随云原生技术的成熟与落地,越来越多框架、中间件等开源项目相继涌现,帮助开发者和企业有效解决业务问题。2022年1月8日,CSDN携手字节跳动基础架构,将在北京举办第四场云原生线下Meetup。在这里,您可以与众多开源技术…

Flink CDC 2.0 正式发布,详解核心改进

简介: 本文由社区志愿者陈政羽整理,内容来源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的《详解 Flink-CDC》。深入讲解了最新发布的 Flink CDC 2.0.0 版本带来的核心特性,包括:全量数据的并发…

unity三维地图的经纬度如何在二维地图上表示_接入C++版本recastnavigation寻路库到Unity/服务端中...

前言因为Unity版本的更新迭代,老版本的A*插件在新版本Unity已经无法正常使用,包括一些运行时代码也已经过时,重新接入要花费很多时间,干脆接入一个新的寻路方案吧。这里选择的是久负盛名的https://github.com/recastnavigation/re…