date -s 命令是否忽略 NTP 服务?

date -s 命令是否忽略 NTP 服务?

我正在使用 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 -schronyd将测量新的偏移量(如命令所示chronyc tracking),但不允许逐步快速更正。它只能加快或减慢时钟。纠正如此大的偏移量需要很多年的时间。

您需要将makestep指令更改为makestep 1 -1以允许在任何更新时执行步骤,或者最好对时钟进行较小的调整(例如date -s '+2 sec')以验证同步的恢复。

相关内容