为什么必须重新启动 linux 服务器才能正确处理 resolv.conf 中的更改?

Gra*_*ray 8 domain-name-system linux resolv.conf

我知道这一定是我缺乏理解,但这就是问题所在。

我们最近将 DNS 服务器从 192.168.1.1 更改为 .2,因此我访问了所有 8 个 linux 服务器并更改了 /etc/resolv.conf 以反映更改。请注意,它们都是静态的,不涉及 DHCP。

进行更改后,我可以立即使用 nslookup 和 dig 测试结果,一切看起来都不错。我做了一个 /etc/init.d/networking restart - 重新启动网络子系统 - 并在每台服务器上重新启动 apache 和 postfix,只是为了确定。

几天后,我收到一份报告,指出我们的网站不再发送电子邮件。仔细阅读日志,我发现 mod_php 进程无法解析 dns 条目以发送邮件。在我的头上敲了大约 30 分钟后,我重新启动了服务器,一切都恢复了正常。

第二天在不同的服务器上(使用 CentOS 而不是我们普通的 Ubuntu),我收到一个报告,指出电子邮件没有通过,并且确实查看日志表明 Postfix 无法解析名称。重新启动,它几乎立即发送所有排队的邮件。

那么我在这里错过了什么?我没有正确理解这个过程的哪一部分?

HTT*_*500 11

你可能被 nscd 咬了:http : //linux.die.net/man/8/nscd

干杯


bor*_*yer 8

大多数应用程序在启动时(使用res_init)初始化解析器一次,之后再也不初始化。这对于像 ping 这样的短期应用程序来说不是问题,但对于长时间运行的守护进程来说则更为严重。

Apache 进程(运行 mod_php)可能就是这种情况。重新启动 Apache 就足够了。