开发者社区> 铭毅天下> 正文

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

简介: 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工具,回头研究下。

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
自动统计出差费用-shell 脚本自动统计
计算车费,餐补,住宿补。并且转换金额大写
14 0
新建Oracle 数据库的Shell+SQL脚本
不用图形界面,也不用DBCA的静默方式,下面是用Shell+SQL创建Oracle数据库的脚本。
17 0
shell脚本写出监控内存,磁盘使用率的脚本,超过阈值,用“wall”命令发警报
shell脚本写出监控内存,磁盘使用率的脚本,超过阈值,用“wall”命令发警报
15 0
Shell-使用&和wait让你的脚本并行执行
Shell-使用&和wait让你的脚本并行执行
20 0
Shell-/bin/bash和/bin/sh解释器的误用引起的脚本语法错误
Shell-/bin/bash和/bin/sh解释器的误用引起的脚本语法错误
36 0
在 Shell 脚本中跟踪调试命令的执行
在 Shell 脚本中跟踪调试命令的执行
19 0
在 Shell 脚本中执行语法检查调试模式
在 Shell 脚本中执行语法检查调试模式
24 0
Linux 中启用 Shell 脚本的调试模式
Linux 中启用 Shell 脚本的调试模式
14 0
【Shell篇】循环查找某个目录的脚本文件并打印运行
这段代码是/build/envsetup.sh文件最后一段代码,搜索了源代码中所有的vendorsetup.sh脚本。
28 0
解决window移植到linux shell执行Python脚本提示找不到模块问题:
调试python工程时代码正常执行,但远程执行时,导入模块时提示找不到模块,即使模块就在当前工程目录下也不行
23 0
+关注
铭毅天下
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Shell 脚本速查手册
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多