我正在使用 GPSD 和 Chrony 同步时间。但是,如果在 NTP 服务处于活动状态时使用 date -s 手动更改时间,则无法再次同步。
如果使用 date -s 更改时间,是否会忽略使用 ntp 服务的时间同步?下面是我的 chrony.conf / timedatectl / chronyc 跟踪屏幕。
chrony.conf
# information about usuable directives.
# This will use (up to):
# - 4 sources from ntp.ubuntu.com which some are ipv6 enabled
# - 2 sources from 2.ubuntu.pool.ntp.org which is ipv6 enabled as well
# - 1 source from [01].ubuntu.pool.ntp.org each (ipv4 only atm)
# This means by default, up to 6 dual-stack and up to 2 additional IPv4-only
# sources will be used.
# At the same time it retains some protection against one of the entries being
# down (compare to just using one of the lines). See (LP: #1754358) for the
# discussion.
#
# About using servers from the NTP Pool Project in general see (LP: #104525).
# Approved by Ubuntu Technical Board on 2011-02-08.
# See http://www.pool.ntp.org/join.html for more information.
pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys
# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift
# Uncomment the following line to turn logging on.
#log tracking measurements statistics
allow
# Log files location.
logdir /var/log/chrony
# Stop bad estimates upsetting machine clock.
maxupdateskew 100.0
# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
#rtcsync
# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
rtcsync
refclock SHM 0 refid GPS offset 0.2 precision 1e-1 noselect
refclock PPS /dev/pps0 refid PPS lock GPS precision 1e-9 offset 0.002 prefer
log tracking measurements statistics
makestep 1 3
timedatectl
timedatectl
Local time: Wed 2020-01-01 00:13:47 KST
Universal time: Tue 2019-12-31 15:13:47 UTC
RTC time: n/a
Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
chronyc 跟踪
chronyc tracking
Reference ID : 50505300 (PPS)
Stratum : 1
Ref time (UTC) : Sun May 01 01:38:14 2022
System time : 73563848.000000000 seconds slow of NTP time
Last offset : -0.000000430 seconds
RMS offset : 1670042.625000000 seconds
Frequency : 13.020 ppm fast
Residual freq : -0.018 ppm
Skew : 0.032 ppm
Root delay : 0.000000001 seconds
Root dispersion : 0.000025015 seconds
Update interval : 14.9 seconds
Leap status : Normal
如果您查看上面的屏幕,timedatectl 和 chronyc 跟踪时间是不同的。
如果关闭ntp服务再开启或者chronyd重启,会再次同步。
如果您有任何信息,我将非常感激能够告诉我。
答案1
是的。
date -s
对 NTP 一无所知。如果您将日期/时间更改为与实际时间相差太大的时间,则 NTP 将失败(继续运行,但不再尝试调整时间)。
NTP 的工作方式(至少在 Linux 上如此,但我怀疑相当多的操作系统也是如此)是在启动时调整日期。这意味着如果您缺少时钟电池,在冷重启后,您的日期和时间可能会重置回 1970 年 1 月 1 日……但 NTP 会正确地将日期和时间调整为“现在”。
进一步调整日期是通过 NTP 系统自动完成的,因此实际上无需执行任何其他操作。
此外,NTP 偶尔可能会卡住时间太长(例如,您的互联网连接中断了几个小时),时钟可能会漂移太多,以至于完全偏离。在这种情况下,您只需重新启动 NTP 服务器即可。
如果您想使用 Chrony,它的工作方式类似,但它仅限于客户端,并且不支持默认 Linux NTP 服务提供的所有功能。但对于更多桌面系统来说,这已经足够了。
我不太了解 Chrony 和其他 NTP 类服务,所以我不知道如果您大幅更改日期它们会如何表现。
答案2
makestep 1 3
您的指令chrony.conf允许在前三次时钟更新中逐步更正系统时钟。这是大多数发行版中的默认设置,通常是一件好事。
如果使用 进行较大的更改date -s
,chronyd
将测量新的偏移量(如命令所示chronyc tracking
),但不允许逐步快速更正。它只能加快或减慢时钟。纠正如此大的偏移量需要很多年的时间。
您需要将makestep
指令更改为makestep 1 -1
以允许在任何更新时执行步骤,或者最好对时钟进行较小的调整(例如date -s '+2 sec'
)以验证同步的恢复。