无法运行 nscd。DNS 缓存因此失效

无法运行 nscd。DNS 缓存因此失效

我正在尝试解决 MediaTemple 服务器(运行 CentOS5)上的问题,其中 DNS 缓存已变得陈旧 - 我认为是因为 nscd 已崩溃。我尝试重新启动 nscd:

# service nscd restart
Stopping nscd:                                             [FAILED]
Starting nscd:                                             [  OK  ]

这是有道理的,因为我相信 nscd 已经崩溃,所以它不应该正在运行,但是当我查看 nscd 的状态时:

# service nscd status
nscd dead but subsys locked

并且ps -A没有返回与 nscd 相关的任何进程(我猜是因为它已经死了)。我编辑/etc/nscd.conf并取消注释了定义日志文件位置的行。它创建了该文件,但从未向其中写入任何内容。

我尝试查看初始化脚本,但发现它没有帮助,因为脚本认为一切运行正常 - 服务返回它已正确启动。

我如何“解锁” nscd 抱怨的子系统?

答案1

不幸的是,这些是 nscd init 脚本中的错误,状态没有任何意义。 init 脚本期望 pid 文件为/var/run/nscd.pid(如果 init 脚本正在写入 pid 文件,则它会为)。 唉,nscd它本身将其 pid 文件写入/var/run/nscd/nscd.pid

为了简化,请尝试关闭以进行故障nscd排除。

如果您想知道ncsd启动失败的原因,请检查的输出strace -f /usr/sbin/nscd

答案2

探索 bind-chroot 包(及其依赖项)的选项。只需 yum install 并修改 /etc/resolv.conf 以指向 127.0.0.1。它比 nscd 更强大一些。

答案3

Nscd 将其缓存文件写入磁盘。我以前见过它的问题,如果读取此缓存时出现问题,它就会崩溃。尝试删除缓存目录(应该是 /var/cache/nscd)中的任何文件,然后重新启动 nscd。

答案4

我遇到了一个稍微不同的问题 - 我认为它是由于系统分区上的磁盘空间不足而引起的。我使用 终止了服务$ sudo kill <pid>,然后删除nscd.pid,然后启动服务。文件位置可能因操作系统和版本而异。对于 CentOS(可能还有其他 Redhat 版本),/var/run/nscd/nscd.pid

启动:

$ sudo service nscd start

相关内容