应用场景:
最近由于开发同事需求,需要在各个区服的游戏配置文件中追加一个BI相关的redis配置信息。
如在app.conf.php中有如下字段
'redis_list' => array(
'normal' => array(
'host' => '192.168.5.7',
'port' => 6382,
'db' => 1
),
现在需要在redis_list数组内增加一个bi_redis的配置,如下
'redis_list' => array(
'bi_redis' => array(
'host' => '192.168.5.23',
'port' => 6403,
'db' => 1
),
'normal' => array(
'host' => '192.168.5.7',
'port' => 6382,
'db' => 2
),
),
线上大概有100个区服左右,也就是说需要在100个配置文件中去添加红色那段内容。全部手动添加肯定不行的,我首先想到的就是利用sed的 -i 参数更改文件,然后是利用sed的a参数追加内容,再结合ssh进行批量修改。
1.查看添加内容,但是不真正更改文件内容
sed -n "/redis_list/a\ 'bi_redis' => array( \n\t'host' => '192.168.5.23',\n\t 'port' => 6403,\n\t'db' => 1\n\t)," app.conf.php
2.更改文件内容,添加内容
3.结合ssh更改其他主机上的app.conf.php
相关脚本:
4.将/data/zhanguo_app/目录下所有的app.conf.php文件中添加如上内容并检查语法
经验分享一下:
像这种需要批量修改文件的案例,首先要考虑的是能够通过脚本或工具进行修改,能不手动修改就不要手动修改。然后根据实际应用场景,想想思路,比如这里需要批量对app.conf.php文件添加内容,首先想到利用sed的-i 参数进行修改,然后通过sed的a参数进行追加内容。需要对多台服务器进行修改可以通过ssh或其他工具执行。这里sed结合使用shell变量和ssh,遇到的最大的问题就是单引号(')和双引号(")的正确处理,要不然没法达到需求。