GBase 8a在龙蜥上用chronyc代替ntpdate解决时钟不一致问题

几台部署在龙蜥8.9 下的GBase 8a集群,在春节期间下电了,节后发现系统时钟不准。尝试用ntpdate同步发现不支持该命令,用yum 也无法安装ntp服务。经搜索发现,龙蜥用chronyc来实现时钟同步。

参考

https://cloud.tencent.com/developer/article/2311604

https://blog.csdn.net/macaiyun0629/article/details/137447219

龙蜥系统

[root@vm151 ~]# cat /etc/os-release
NAME="Anolis OS"
VERSION="8.9"
ID="anolis"
ID_LIKE="rhel fedora centos"
VERSION_ID="8.9"
PLATFORM_ID="platform:an8"
PRETTY_NAME="Anolis OS 8.9"
ANSI_COLOR="0;31"
HOME_URL="https://openanolis.cn/"

[root@vm151 ~]# cat /etc/anolis-release
Anolis OS release 8.9

命令

同步时钟 chronyc makestep

立即将系统时间调整到它当前所知的 NTP 时间。如果系统时间与 NTP 时间有大的偏差,这条命令可能会导致系统时间的突然跳跃。但是,如果需要立即同步时间,这可能就是所需要的。

一些文章里提到个-a参数,但根据man的信息,该参数仅是为了兼容才保留,实际已经被忽略。

如下是本地运行前后,系统时钟的变化。

[root@vm151 ~]# date
Tue Feb 24 23:56:04 CST 2026
[root@vm151 ~]# chronyc makestep
200 OK
[root@vm151 ~]# date
Wed Feb 25 08:56:36 CST 2026

检查时钟 chronyc tracking

显示的信息是 chronyd 服务当前同步状态的快照。主要包括正在同步的远程服务器的 ID、系统在 NTP 层次中的位置(stratum)、系统时间与 NTP 时间的差异,以及其他一些信息。如果系统时间与 NTP 时间的差异接近于 0,并且显示 "Leap status : Normal",那么同步状态可以认为是正常的。

如下是同步前和同步后的检查结果。之前的时间慢了3万多秒。

[root@vm151 ~]# chronyc tracking
Reference ID    : CB6B0658 (203.107.6.88)
Stratum         : 3
Ref time (UTC)  : Wed Feb 25 00:50:13 2026
System time     : 32414.154296875 seconds slow of NTP time
Last offset     : -0.000094009 seconds
RMS offset      : 3076.199462891 seconds
Frequency       : 6.521 ppm slow
Residual freq   : -0.006 ppm
Skew            : 2.104 ppm
Root delay      : 0.038376234 seconds
Root dispersion : 0.003302030 seconds
Update interval : 515.2 seconds
Leap status     : Normal

=== 同步时钟==============

[root@vm151 ~]# chronyc tracking
Reference ID    : CB6B0658 (203.107.6.88)
Stratum         : 3
Ref time (UTC)  : Wed Feb 25 01:07:00 2026
System time     : 0.000000001 seconds slow of NTP time
Last offset     : -0.000908873 seconds
RMS offset      : 2768.579589844 seconds
Frequency       : 6.766 ppm slow
Residual freq   : -0.070 ppm
Skew            : 1.915 ppm
Root delay      : 0.039329700 seconds
Root dispersion : 0.004922534 seconds
Update interval : 521.5 seconds
Leap status     : Normal
[root@vm151 ~]#

以下是 chronyc tracking 命令输出的各个字段的含义:

  • Reference ID:你的系统正在与之同步的远程 NTP 服务器的地址或者 IP。
  • Stratum:表示你的系统在 NTP 层次中的级别。Stratum 1 服务器直接与原子钟或 GPS 时钟等准确的时间源同步。Stratum 2 服务器与 Stratum 1 服务器同步,以此类推。这个字段表示你的系统是与哪个 stratum 的服务器同步。
  • Ref time (UTC):上一次从远程服务器接收到时间更新的时间(以 UTC 表示)。
  • System time:你的系统时间相对于 NTP 服务器时间的差异。如果显示 "fast",表示你的系统时间比 NTP 时钟快;如果显示 "slow",表示你的系统时间比 NTP 时钟慢。
  • Last offset:上一次时间同步时,系统时间与 NTP 服务器时间的偏移量。
  • RMS offset:时间偏移量的均方根,是一个衡量时间同步精度的指标。
  • Frequency:本地系统时钟的速度,相对于完美的时间源,以每百万部分(ppm)表示。如果显示 "fast",表示你的系统时钟运行得比完美的时钟快;如果显示 "slow",表示你的系统时钟运行得比完美的时钟慢。
  • Residual freq:在最后一次同步之后,已经观察到的本地时钟频率的改变。
  • Skew:本地时钟频率估计的不确定性。
  • Root delay:到同步源的往返时间。
  • Root dispersion:同步源的最大可能误差。
  • Update interval:两次连续更新之间的间隔时间(以秒为单位)。
  • Leap status:闰秒状态。可以是 "Normal"、"Insert second" 或 "Delete second"。

查看NTP源服务器状态 chronyc sources -v

显示 chronyd 服务正在使用的 NTP 源服务器的详细状态。这个命令会列出每个源服务器的 IP 地址,以及每个源服务器的状态和时间偏移量。通过这个命令,你可以看到你的系统是从哪些 NTP 服务器获取时间的,以及每个服务器的状态和时间偏移量。

[root@vm151 ~]# chronyc sources -v

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88                  2  10   377   855  -5627us[-6536us] +/-   29ms

源模式:server,源状态:好

总结

其它的命令,如添加或删除时间源,切换时间源等,请自行搜索查找。时钟调整正确后,GBase 8a的一些时间相关的执行结果,也终于恢复正常了。

最后,可以将该命令加入cron定时执行,具体参数可参考ntpdata命令。