dns-nameservers
の/etc/network/interfaces
を編集した後、resolvconf(8)
にネットワークを再起動せずに新しい値を読み取るように指示するにはどうすればよいですか? (サービス中断の原因)
-u
オプションは機能しないようで、同じ値に更新されます。
そのとおりです。「resolvconf -u」では、行った変更を有効にできません。このコマンドは、resolvconfのデータベースからresolv.confのみを更新しますが、データベースを更新する必要があります。
問題のインターフェースがeth0であると仮定します。/etc/network/interfacesにこのようなスタンザがあると仮定します。
iface eth0 inet static
[...]
dns-nameservers 1.1.1.1 2.2.2.2
ここで、「dns-nameservers」行を変更します。この変更を有効にするには(&&が潜在的に開いているSSH接続を切断しないように注意してください)
ifdown eth0 && ifup eth0
または再起動します。
私は最近これに二度遭遇しました。
はじめてSudo ifdown eth0
を実行しましたが、これはもちろんssh接続を切断し、NICを無視してマシンを残しました。痛い。サーバーのIPMIインターフェイスを介して再度制御を取得する必要がありました。
2回目は、以前の間違いから学び、Sudo ifdown eth0 ; Sudo ifup eth0
を実行しました。もちろん、sshウィンドウは停止しましたが、マシンは新しいssh接続にすばやく応答し、DNSの変更が有効になりました。 2台目のサーバーでも同じことをしましたが、今回はsshウィンドウに何かを入力する前に待機しました。ウィンドウはそのままで、DNSの変更が適用されていました。驚くばかり。
重要なことは、シェルのセミコロン演算子を使用して、両方のコマンドが1行になるようにすることでした。この方法では、インターフェイスがダウンするまでに、インターフェイスを復元するコマンドがすでに入力されています。スクリプトを記述して実行することもできたと思いますが、これは簡単に思えました。
PDATE:これを行う別の方法があります。 Sudo /etc/init.d/networking restart
またはSudo service network-interface restart INTERFACE=eth0
の1ステップでUbuntuネットワークサービスを再起動することもできます。インスピレーションをくれたJFAに感謝します。
これと同じ問題を経験しました。再起動しても、libcフックを手動で呼び出すと変更が失われます。
したがって、私が見つけた最も安定した方法は、目的のコンテンツを/etc/network/interfaces
に入れた後、/etc/resolvconf/resolv.conf.d/original
を編集して必要な行を含めるために、そのディレクトリにtail
が存在しないことを確認することです、cd /etc/resolvconf/resolv.conf.d
を実行し、/etc/resolvconf/update.d/libc
を呼び出します。
tail
が存在する場合(デフォルトでは、original
を指す)、/etc/network/interfaces
から派生したコンテンツの後に元のセットアップも続くことに注意してください。
これらの変更を再起動によって最も安全に適用できることは、率直に言って非常識です。現在のシステムは、「このファイルを編集して、おそらく構成管理システムからデプロイする」ものを使用し、複数の抽象化レイヤーの背後に隠し、通常のブートフレームワーク外でメンテナンスを呼び出すためのクリーンな方法はありません。