[这适用于 Debian Squeeze,但适用于 Ubuntu 和其他 Linux 发行版。]
我有一个相当复杂的 /etc/network/interfaces 文件,它是根据各种因素(接口数量、是否需要桥接、vlan 等)生成的。生成新文件后,我需要 ifup 所有新接口并 ifdown 所有过时接口;如果主接口发生变化(例如,从 eth0 或 br0 变化),我可能必须重新启动。
现在我弄清楚了如何手动进行 ifup/ifdown。
是否有一个脚本可以帮我完成这个任务?
答案1
我不知道您目前如何修改/生成您的/etc/network/interfaces
。最好的解决方案可能是使用配置管理工具(例如 Puppet、Chef 或 Cfengine)来执行此任务,并ifup
在文件被修改时调用它。此类工具是为此类任务量身定制的。您甚至可以从 Puppet 的模板功能或 Augeas 提供程序中受益,以修改您的文件。
另一个解决方案是使用 inotify。例如,您可以设置为每次修改时incron
调用。ifup
/etc/network/interfaces
答案2
我不知道这个用例有任何现成的脚本,但为这个任务编写一个简单的 shell 脚本应该不太难。
答案3
files/
这就是我使用 puppet 管理 ifcfg 文件的方法。我为每个主机创建一个目录,例如:
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 特定有关。