《懒人Shell脚本》之五——一键修改分布式系统配置文件

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 0. 背景分布式部署程序的时候,近20台机器部署了同样的环境进行数据采集。当更换程序时,能否修改好一套,其他机器只需要一步scp,一步执行脚本。一键修改配置,正是本文的目的。

1. 实现要求

1、修改*.sh的可执行权限;

2、自动获取表名称的前两个字符,相应所有文件名称统一修改;

3、修改配置文件中的mysql表名、mysql地址;

4、从其他已有填好的配置中读取并修改java程序执行的start_num, end_id值。


2. 核心脚本如下

简化版本:


[root@localhost tt_process_detail]# cat change_conf_sim.sh

#需要手动修改

dst_mysql_ip="10.0.1.30"


processName=$(echo `pwd` | awk -F "/" '{print $4}')

city_code=`echo ${processName:0:2}`


find ./ -name "*.sh" | xargs chmod a+x


#自动修改名称

for((i=1;i<=4;i++))

do

 mv yt_ent_p${i} ${city_code}_ent_p${i}

done;


#自动生成

dst_table_name="${city_code}_company_info"


#循环实现

for((i=1;i<=4;i++))

do

#从旧表中获取start_num, end_id值

#读取指定行的数字部分

 p_begin=`sed -n 30p ../${city_code}_process/${city_code}_ent_p${i}/conf/configuration.xml | grep -o '[0-9]\+'`

 p_end=`sed -n 36p ../${city_code}_process/${city_code}_ent_p${i}/conf/configuration.xml | grep -o '[0-9]\+'`


#将获取的旧表值写入到新表中

 sed -i "30s/<value>.*<\/value>/<value>${p_begin}<\/value>/" ./${city_code}_ent_p${i}/conf/configuration.xml

 sed -i "36s/<value>.*<\/value>/<value>${p_end}<\/value>/" ./${city_code}_ent_p${i}/conf/configuration.xml


 #修改配置

 sed -i "s#te_company_info#${dst_table_name}#g" ./${city_code}_ent_p${i}/conf/configuration.xml

 sed -i "s#10.8.5.10#${dst_mysql_ip}#g" ./${city_code}_ent_p${i}/conf/configuration.xml

done;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

3. 变量嵌套变量举例

[root@localhost hz_process_detail]# cat test.sh

#!/bin/bash


p1_begin=11;

p2_begin=22;


for ((i=1;i<=2;i++))

do

 begin=p${i}_begin

 eval p_begin_no=$(echo \$$begin)

 echo $p_begin_no

done;

1

2

3

4

5

6

7

8

9

10

11

12

4.获取ip地址的方法:

[root@localhost tt_process_detail]# cat tt_ent_p1/conf/configuration.xml | grep "jdbc" | awk -F "/" {'print $3'}

10.0.1.30

1

2

4. 小结

1)能自动实现的,坚决不要手动修改。

2)20套程序,单纯手动修改,耗时近1个小时,包含排查错误、验证时间。

脚本实现,scp复制20套,各机器执行下脚本,10分钟之内搞定。

3)其中,关于shell下修改xml,stackoverflow提到xmlstarlet工具,回头研究下。

本文使用的取指定行,写指定行的取巧的方式。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
32 1
|
10天前
|
监控 Shell Linux
Linux的Shell脚本详解
Linux的Shell脚本详解
|
14天前
|
Shell
shell脚本
shell脚本
16 2
|
22天前
|
Ubuntu Java Linux
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
33 2
|
23天前
|
Shell Linux
shell循环读文件 Linux脚本读文件
shell循环读文件 Linux脚本读文件
17 3
|
22天前
|
Shell Linux
shell linux中shell脚本编写俄罗斯方块
shell linux中shell脚本编写俄罗斯方块
21 1
|
23天前
|
Shell Linux Perl
Linux shell脚本sed使用
Linux shell脚本sed使用
15 1
|
3天前
|
Shell
Shell脚本之条件语句if总结
Shell脚本之条件语句if总结
|
27天前
|
存储 算法 安全
shell 脚本之 函数与数组
shell 脚本之 函数与数组
|
22天前
|
Ubuntu Shell Linux
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
14 0