2

У меня есть 2 Linux-сервера A и B, которые имеют общий каталог. Я должен создать символическую ссылку для файла /etc /hosts для каждого сервера с одним общим файлом. когда я обновляю тот общий файл, который используется обоими серверами, они могут узнать, какие изменения в файле, и автоматически обновляют /etc /hosts. Возможно ли использовать символическую ссылку или любой другой вариант?

2 ответа2

2

Вместо того, чтобы иметь символическую ссылку на (удаленный) файл хостов, лучше обновить локальную копию информацией удаленного. Таким образом, в случае сбоя в сети или если "главный" хост не работает, у вас все еще есть локальный файл /etc /hosts.

В каждом локальном файле /etc /hosts должна быть "структура" для разделения локальной и глобальной информации.

пример локального файла /etc /hosts:

# local informations:

127.0.0.1 localhost otherhandylocalalias
# specificly needed aliases for this host:
1.2.3.4 some_specific.host.domain

# before:local after:global informations (copied from: ...........)

........................
........................

И вы можете заменить оставшуюся часть файла (каждый раз после строки «# before: local after: global ....») "глобальной" информацией, взятой из удаленного файла, выделенного для размещения "проверенной" глобальной информации. (например: remotehost:/etc/hosts_global_informations.master) или извлекается ТОЛЬКО из "глобальной части" главного файла /etc /hosts (например: remotehost:/etc /hosts).

Особенности получения этой информации различны, в зависимости от того, что вам доступно.

Пример: в вашей оболочке вы можете сделать это вручную следующим образом: (это предполагает, что все файлы /etc /hosts содержат один и тот же разделитель, представляющий собой строку, соответствующую регулярному выражению "zesep":

export zesep='# before:local after:global .*'
   #this allows you to complete the line in each /etc/hosts with non-global informations!

awk "/${zesep}/,0 { continue } 1 { print }" </etc/hosts >/etc/newlocalhosts 
ssh user@remotehost 'cat /etc/hosts' | awk "/${zesep}/,0 { print } " >> /etc/newlocalhosts

А затем замените /etc /hosts на /etc /newlocalhosts, ПОСКОЛЬКУ ВЫ УВЕРЕНЫ, что новый является правильным (будьте осторожны: проверьте, например, что ssh был в порядке, так как он может потерпеть неудачу в случае сбоя сети!). Если это правильно, вы можете:

cat /etc/newlocalhosts > /etc/hosts  #this will keep the settings (mode, etc) of /etc/hosts but replace its content. 
0

Используя традиционные символические ссылки, это невозможно. Вы ищете какое-то программное обеспечение для управления конфигурацией, такое как Puppet или cfengine, чтобы вытолкнуть /etc /hosts при обновлении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .