注:这个前提是你已经批量设置好主机名了

有些应用程序需要读取 /etc/hosts 中的本机主机映射关系,在今天遇到的一项扩容中,我这边需要先把某台服务器的 /etc/hosts 同步到需要扩容的服务器上,然后根据扩容的具体的主机和主机名修改扩容主机中的 /etc/hosts 文件。

同步的源 /etc/hosts

127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.0.1 GD9-TEST-004

扩容的主机有 10 台,分别为

192.168.0.2 GD9-TEST-005
192.168.0.3 GD9-TEST-007
192.168.0.4 GD9-TEST-008
192.168.0.5 GD9-TEST-009
192.168.0.6 GD9-TEST-010
......

/etc/hosts 同步到扩容的主机后,需要修改下各自的 /etc/hosts,比如 192.168.0.2 需要修改成

127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.0.2 GD9-TEST-005

一台台的修改太慢了,然后在本地修改好配置文件在传送过去太 low 了,有没有动态的方法呢。答案是有的。下面是一个脚本

#!/bin/bash
local_host=`/sbin/ifconfig bond0 |grep -a "inet addr:" |awk -F":" '{print $2}' |egrep -o '([0-9]{1,3}\.?){4}'`
host_name=`hostname`
sudo sed -i  "/GD6-TEST-001/s/192.168.0.1/${local_host}/" /etc/hosts
sudo sed -i  "/GD6-TEST-001/s/GD6-TEST-001/${host_name}/" /etc/hosts

然后使用 Fabric 来批量处理,即可动态的更新 /etc/hosts


yexiaobai
4.8k 声望875 粉丝

就是不告诉你 O(∩_∩)O哈哈~。