为什么我的ntp不更新?

为什么我的ntp不更新?

我有一个仅包含 Debain 控制台的系统。

我刚刚意识到它没有更新时钟:

$ date
Mon 10 Aug 20:33:23 BST 2020

$ ntpdate
10 Aug 20:27:45 ntpdate[8029]: no servers can be used, exiting

$ ntpdate-debian
10 Aug 20:28:20 ntpdate[8038]: the NTP socket is in use, exiting

$ sudo ntpdate
10 Aug 20:33:53 ntpdate[8371]: no servers can be used, exiting

$ sudo ntpdate-debian
10 Aug 20:28:20 ntpdate[8038]: the NTP socket is in use, exiting

事实:

  • 由于配置错误,ntpdate 无法工作(请稍后查看我的配置)
  • 由于套接字正在使用,ntpdate-debin 无法工作(ntp 服务正在运行)

我停止“ntp服务”后:

$ sudo service ntp stop
$ sudo ntpdate
10 Aug 20:33:53 ntpdate[8371]: no servers can be used, exiting
$ sudo ntpdate-debian
1 Apr 17:25:24 ntpdate[8383]: step time server a.b.c.d offset 83278265.128578 sec
$ sudo service ntp start

可以看到,停止ntp服务后,ntpdate仍然无法运行,但ntpdate-debian终于可以设置正确的日期了。

如何更改以下配置以使“ntp 服务”在后台自动完成其工作?

driftfile /var/tmp/ntp/ntp.drift
leapfile /usr/share/zoneinfo/leap-seconds.list
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
pool 0.europe.pool.ntp.org iburst
pool 1.europe.pool.ntp.org iburst
pool 2.europe.pool.ntp.org iburst
pool 3.europe.pool.ntp.org iburst
server 0.debian.pool.ntp.org
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1
restrict source notrap nomodify noquery

我的配置有什么问题吗?它甚至包含“0.debian.pool.ntp.org”,如果我手动运行它可以工作:

ntpdate -q 0.debian.pool.ntp.org

答案1

您没有提到您的 Debian 版本,但它似乎是 Debian 10(buster目前为“oldstable”)或更旧版本。自从 NTP 套件的主要开发者(David L. Mills,84 岁)退休后,NTP 代码的地位就陷入了停滞。

到 Debian 11 发布时,两者的最新上游版本ntpdatentpd相当旧,并且存在多个已知的安全漏洞,因此 Debian 11 最终推荐使用较新的 NTP 实现chrony。然而,经典的ntpdatentpd仍然可以在 Debian 11 中使用。

使用的唯一配置文件/usr/sbin/ntpdate/etc/ntp.keys.其他所有内容都必须在命令行或调用的脚本中指定/usr/sbin/ntpdate

ntpdate-debian是一个读取/etc/default/ntpdate并使用其中配置的时间服务器的脚本。

仅适用/etc/ntp/ntp.conf于 NTP 服务(ntpd进程)。

ntpdate如果sudo ntpdate没有任何其他参数,您的失败似乎是正常和预期的,因为ntpdate在这样调用时不知道要使用哪个服务器。

由于ntpdatentpd(= ntp 服务)都尝试使用本地 UDP 端口 123,因此您不能同时运行两者:必须是其中之一。这解释了为什么你sudo ntpdate只有在停止 NTP 服务后才能工作。由于 UDP 端口号小于 1024,因此如果没有 root 权限,则无法使用该端口。

您没有显示您的内容/etc/default/ntpdate,因此我无法猜测它使用了哪个服务器,但在您停止 NTP 服务后它似乎已经起作用。不带参数运行ntpdate不会指定使用哪个 NTP 服务器进行同步,即使使用sudo.

NTP 服务无法同步您的时钟,因为您的系统时间是方式不真实(几年了!)。默认情况下,NTP 服务(= 进程ntpd)有一个安全限制,我认为大约是 +/- 1000 秒:如果系统时间超出这个范围,ntpd甚至不会尝试修复它,因为时间太长了跳转可能会导致数据库和其他关心时间的软件出现问题。系统管理员有责任使系统时钟大致类似于当前时间,然后ntpd能够同步它。

如果ntpd使用该选项启动-g,则第一次调整(仅!)可以大于 1000 秒安全限制。如果您的系统使用 Debian 10 的默认设置,则/etc/default/ntp应该有NTPD_OPTS='-g',它告诉ntpd您在作为服务启动时使用此选项。如果您有这样的配置,那么只需停止并重新启动 NTP 服务 ( sudo service ntp stop; sudo service ntp start) 就足以修复您的时间...除非有一些最终的健全性检查ntpd使其拒绝进行超过一年左右的调整。

(如果您运行对时间敏感的应用程序,此默认设置实际上会使 Debian 10 的 NTP 服务重启起来有点危险。其他发行版通过提供两个单独的服务来解决此问题:一个在启动早期运行的一次性ntpdate服务,并且可以使如果需要的话进行大的调整,然后ntpd再开始,并且仅限于逐步调整,这使得服务可以ntpd更安全地随时重新启动。)

假设您的系统使用类似 PC 的 x86 硬件,并具有可用电池供电的实时时钟(RTC,也称为“BIOS 时钟”),您也许应该执行 after 操作sudo hwclock --systohc --utcsudo ntpdate-debian以使 RTC 获得正确的时间。如果RTC即使在精度很差的情况下工作,它也应该ntpd在系统关闭时将系统时间保持在安全限度内,以便ntpd能够完全同步。

答案2

交叉检查您要添加服务器的配置文件。

ntpdate 不使用“ntp.conf”。

另外,请交叉检查您是否已经运行了“ntpd”服务。这可能会造成冲突。

相关内容