我有一个只有 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
您没有提到您的 Debian 版本,但它似乎是 Debian 10(
buster
目前为“oldstable”)或更早版本。自从 NTP 套件的主要开发者(David L. Mills,84 岁)退休后,NTP 代码的地位就停滞不前了。到 Debian 11 发布时,两者的最新上游版本都
ntpdate
相当ntpd
陈旧,并且有几个已知的安全漏洞,因此 Debian 11 最终推荐了更新的 NTP 实现chrony
。然而,经典的ntpdate
和ntpd
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
在这样调用时不知道要使用哪个服务器。由于
ntpdate
和ntpd
(= 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
使其拒绝进行超过一年左右的调整。ntpdate
(如果您运行的是对时间敏感的应用程序,此默认设置实际上会使 Debian 10 的 NTP 服务在重启时有点危险。其他发行版通过提供两个单独的服务来解决此问题:一个在启动早期运行的一次性服务,并且可以使如果需要进行大的调整,然后再ntpd
开始,并且仅限于逐步调整;这使得ntpd
服务可以随时重新启动更安全。)假设您的系统正在使用类似 PC 的 x86 硬件和功能正常的电池供电实时时钟(RTC,也称为“BIOS 时钟”),您也许应该在 after 后执行,以使 RTC 达到正确的
sudo hwclock --systohc --utc
时间sudo ntpdate-debian
。如果 RTC 即使精度很差也能工作,它应该ntpd
在系统关闭时将系统时间保持在安全范围内,这样ntpd
才能完全同步。交叉检查要将服务器添加到的配置文件。
ntpdate 不使用'ntp.conf'。
另外,交叉检查您是否已经运行了“ntpd”服务。这可能会造成冲突。