[Это для Debian Squeeze, но применимо к Ubuntu и другим дистрибутивам Linux.]
У меня есть довольно сложный файл / etc / network / interfaces, который создается на основе различных факторов (количество интерфейсов, необходимые мосты, vlan и т. Д.). После того, как новый файл сгенерирован, мне нужно запустить все новые интерфейсы и отключить устаревшие интерфейсы; и мне, возможно, придется перезагрузиться, если основной интерфейс изменится (например, изменится с eth0 или br0).
Прямо сейчас я прикидываю, что делать ifup / ifdown вручную.
Есть ли сценарий, который сделает это за меня?
Я не знаю, как вы сейчас изменяете / генерируете свой /etc/network/interfaces
. Вероятно, лучшим решением было бы использовать инструмент управления конфигурацией (например, Puppet, Chef или Cfengine) для выполнения этой задачи и заставить его вызывать ifup
при изменении файла. Такие инструменты предназначены для решения подобных задач. Вы даже можете воспользоваться возможностями создания шаблонов Puppet или поставщиком Augeas для изменения вашего файла.
Другое решение - использовать inotify. Для экзаменуемых вы можете настроить incron
звонить ifup
каждый раз /etc/network/interfaces
модифицирован.
Я не знаю ни одного готового сценария для этого варианта использования, но собрать простой сценарий оболочки для этой задачи не должно быть слишком сложно.
Вот как я управляю файлами ifcfg с помощью puppet. Я создаю каталог под files/
для каждого хоста, например:
modules/network/files/foohostname/
modules/network/files/someotherhostname/
Затем в modules/network/manifests/init.pp
Я делаю следующее:
modules/network/files/hostname/
в каталог сетевых скриптов на хосте.service network start
или /etc/init.d/network start
при добавлении / изменении любых файлов. Я нашел это service network start
вызовет все интерфейсы, которые еще не работают, но не убьет мои существующие сетевые подключения. class network { # copy all ifcfg files from files/hostname/ directory to network-scripts/ # other files in network-scripts/ will not be touched. file { '/etc/sysconfig/network-scripts/': recurse => true, purge => false, owner => root, group => root, ignore => '\.svn', # this is specific to me as I use svn. source => "puppet:///modules/network/${hostname}/", } # if anything changes with the above File resource, then fire network start to bring them up. # this won't restart the network, only bring up any ifaces that are not up yet. exec{ 'network-ifup': command => 'service network start', refreshonly => true, subscribe => File['/etc/sysconfig/network-scripts/'], } }
К вашему сведению, некоторые из вышеперечисленных могут быть немного специфичными для CentOS / RHEL.