我正在尝试解决 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