ntpd 崩溃且未删除 pid 文件

ntpd 崩溃且未删除 pid 文件

我们偶尔会发现服务器上的时间差异,并确认:

  • ntpd 崩溃,没有任何可追踪的日志
  • ntpq 进程已停止,但 pid 存在于 /var/run/ntpd.pid
  • /etc/init.d/ntp restart然后ntpq -p,问题解决了

一开始,ntpq -p返回ntpq: read: Connection refused,所以我继续并ps aux | grep ntp返回无 ntp 进程,而其他正常工作的主机返回了类似 的内容/usr/sbin/ntpd -p /var/run/ntpd.pid -u 101:103 -g。似乎 ntpd 实际上崩溃了,因为在 /var/log/messages 中没有看到任何日志,但也可能它发生得太久了,日志中的那部分已经被轮换了。

于是我继续操作/etc/init.d/ntp restart,并被告知过时的 pid 存在:

Stopping NTP server: ntpdstart-stop-daemon: warning: failed to kill 2124: No such process`.
Starting NTP server: ntpd.

但一切又恢复原状。

我们使用的是 Debian 6 Squeeze,但这个问题从 Debian 5 Lenny 开始就一直存在。我们使用 安装了 ntp aptitude install ntp。服务器在 Linode VPS(= Xen 虚拟化)上,所以我们问了他们,​​但他们说他们没有这样的经验。

此外,虽然我不知道这是否只是巧合,但到目前为止,它似乎只发生在应用程序服务器(Ruby on Rails)上。

问题是,由于 ntpd 崩溃时 pid 文件仍然存在,因此很难检测到崩溃并使用 monit 或类似程序重新启动。我应该/etc/init.d/ntp restart每隔一段时间通过 cron 调用一次吗?

有什么经验、解决方案或想法吗?

答案1

如果你使用 monit,他们的常见问题解答表示 monit 检查以确保 pid 文件中的 pid 有效,以便检测程序崩溃并留下其 pid 文件的情况。

如果您不使用 monit,那么也许您可以找到一个直接与 ntpd 通信的监控脚本(nagios 有几个 ntp 插件,您可能可以使用/重复使用)?如果您无法与它通信,那么它可能已经崩溃了。

相关内容