无需重启即可编辑 /etc/network/interfaces 中的 dns-nameservers

Eri*_*ric 18 dns resolv.conf

编辑dns-nameservers/etc/network/interfaces,如何resolvconf(8)在不重新启动网络的情况下读取新值?(导致服务中断)

-u选项似乎不起作用,它只是更新回相同的值。

jdt*_*ood 27

您是对的,“resolvconf -u”不足以激活您所做的更改。该命令仅从 resolvconf 的数据库更新 resolv.conf,而您需要更新数据库。

假设有问题的接口是 eth0。假设在 /etc/network/interfaces 中有一个看起来像这样的节。

iface eth0 inet static
    [...]
    dns-nameservers 1.1.1.1 2.2.2.2
Run Code Online (Sandbox Code Playgroud)

现在您更改“dns-nameservers”行。要激活此更改,请执行(注意 && 避免破坏可能打开的 ssh 连接)

ifdown eth0 && ifup eth0
Run Code Online (Sandbox Code Playgroud)

或重新启动。

  • 正如 OP 所说,这将导致服务中断。更重要的是,发出 `ifdown eth0` 可能会终止你的 ssh 连接,所以 `ifup` 将永远没有机会运行,切断你与服务器的连接并阻止你重新进入! (6认同)
  • 我知道这是一个迟到的答案,但是您可以执行 `ifdown eth0 && ifup eth0`,它不会中断 SSH(已测试)。 (2认同)

Ran*_*ook 13

我最近两次碰到这个。

第一次,我这样做sudo ifdown eth0当然会终止我的 ssh 连接并让机器忽略它的 NIC。哎哟。我必须通过服务器上的 IPMI 界面才能再次获得控制权。

第二次,我从之前的错误中吸取了教训并做到了sudo ifdown eth0 ; sudo ifup eth0。ssh 窗口当然死了,但是机器很快响应了新的 ssh 连接,并且我的 DNS 修改生效了。我在第二台服务器上做了同样的事情,但这次我在 ssh 窗口中输入任何内容之前等待。窗口一直停留,并且已应用 DNS 更改。惊人的。

关键是使用 shell 的分号运算符,以便两个命令都在一行上。这样,在接口宕机的时候,恢复接口的命令就已经输入了。我想我可以写一个脚本并执行它,但这似乎更容易。

更新:还有另一种方法可以做到这一点。你也可以一步重启Ubuntu网络服务:sudo /etc/init.d/networking restart或者sudo service network-interface restart INTERFACE=eth0. 感谢 JFA 的启发。