我正在更改文件/etc/resolv.conf。但DNS再次被解析为旧IP,而不是我更新的那个 我希望避免重启服务器。有人可以建议一个解决方法吗?
答案 0 :(得分:4)
因为resolv.conf
是普通文件,对您的问题的正确但不那么有用的答案很简单是,当任何进程写入文件时,文件会立即更改(完全是与系统中的任何其他普通文件相同。)
尽管如此,您的实际问题可能是您想知道正在解析域名的进程是否会立即使用resolv.conf
文件中的新数据。
任何进程都可以按照自己的意愿读取和解释此文件,但在绝大多数情况下(除了专用DNS实用程序),它只需使用例如getaddrinfo()
或{来调用系统解析程序{3}}函数。
所以你需要找出系统解析器如何处理这些文件(它实际上不仅resolv.conf
而且nsswitch.conf
,影响整个过程的因素。可以开始查看相应的联机帮助页(gethostname()
和resolv.conf
)。有一个声明,解析器例程在第一次由进程调用时读取相应的文件。因此,更改不会传播到已在运行的进程。
但是这个说法含蓄地假定,程序只是调用getaddrinfo()
并且不关心其他任何事情。对于大多数简单的实用程序等都是如此,但如果认为合适,有一些方法可以改变这种行为。
有nsswitch.conf
函数,通常在第一次调用getaddrinfo()
或类似函数时隐式调用,但应用程序也可以自由调用它。可以读取 res_init()函数读取配置文件(请参阅resolv.conf(5))以获取默认域名,搜索顺序和名称服务器地址。因此应用程序有一个工具制作系统解析器状态的副本以重新读取这些文件。但它必须是明确的要求。
所以,最后,只有可能的答案取决于。对于小实用程序,可以预期解析程序文件只读取一次,并且必须重新启动此实用程序才能获得更新的数据。较大,长期运行的应用程序(例如Web浏览器)可以有自己的方式来查看resolv.conf
,并且在认为合适时可以调用res_init()
。在任何情况下,这都是依赖于应用程序的,它与网络管理器或任何其他系统填充resolv.conf
新数据无关。