Linux中使用Chrony同步时间

Chrony是什么?

Chrony 是网络时间协议(NTP)的一种实现。可以使用 Chrony:

  • 将系统时钟与 NTP 服务器同步,
  • 将系统时钟与参考时钟同步,如ASCII 接收器.
  • 要将系统时钟与手动时间输入同步,
  • 作为 NTPv4(RFC 5905) 服务器或对等服务器,为网络中的其他计算机提供时间服务。

简而言之,Chrony是一个NTP协议的实现,能够同步其他NTP服务器的时间,也可以作为NTP服务器供其他服务器同步时间。

Chrony怎么用?

假设你的所有服务器都在 10.0.0.0/8 网段中,且此网段中所有服务器之间的网络策略是互通的。此时你可以将一台服务器作为Chrony服务器让其他服务器同步它的时间。

例如,我在 10.0.0.0/8 网段中选择 10.10.2.101作为Chrony服务器,然后允许本网段中其他服务器来同步时间,那么配置如下:

服务端:

备份并修改chrony配置文件

cp /etc/chrony.conf /etc/chrony.conf_bak
vim /etc/chrony.conf

文件内容:

# 手动控制时间源(用于手工调整)
manual

# 修改 chrony 对外服务端口(默认 123 → 改为 11123)
# 可以不修改,也可以修改,看需求
port 11123

# 允许 10 段网段访问
allow 10.0.0.0/8

# driftfile 和日志
driftfile /var/lib/chrony/drift
logdir /var/log/chrony

# 启用本地时间源,即使没有外部同步源也能提供服务
local stratum 10

# 外部同步源,如果有外部时间源,chrony服务器也可以通过外部时间来更新自己的时间,没有的话就注释
# 如果服务器通互联网,也可以配置互联网上的 ntp 服务器地址
#server 10.15.163.89 iburst

修改完成后保存退出,重启chrony服务即可:

systemctl restart chronyd

客户端:

备份并修改chrony配置文件

cp /etc/chrony.conf /etc/chrony.conf_bak
vim /etc/chrony.conf

文件内容:

server 10.10.2.101 port 11123 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

修改完成后保存退出,重启chrony服务即可:

systemctl restart chronyd

配置成功后可以通过这条指令来查看当前同步状态

chronyc tracking

输出示例:

[root@server1 ~]# chronyc tracking
Reference ID    : 0A055046 (10.10.2.101)
Stratum         : 11
Ref time (UTC)  : Wed Nov 19 02:11:31 2025
System time     : 0.000006415 seconds slow of NTP time
Last offset     : -0.000008004 seconds
RMS offset      : 0.000010776 seconds
Frequency       : 3.412 ppm fast
Residual freq   : -0.001 ppm
Skew            : 0.013 ppm
Root delay      : 0.000045834 seconds
Root dispersion : 0.000062100 seconds
Update interval : 260.9 seconds
Leap status     : Normal

其中查看最后一行的 Leap status ,如果是Normal则证明与 Reference ID中的IP同步成功,否则代表不成功。

使用下面这条指令可以手动同步一次时间

chronyc makestep

执行以下指令会打印出chrony正在访问的时间源的信息

chronyc sources -v

输出示例:

[root@server1 ~]# chronyc sources -v
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- 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               
===============================================================================
^* 10.10.2.101                   10   8   377   170  -5891ns[  -14us] +/-   23us

其中最后列出的 IP 之前 如果显示 ^*则代表与当前时间源正常同步,如果显示^?则代表未正常同步。

参考链接:

银河麒麟Linux同步时间:NTPd、Chrony、systemd-timesyncd 配置与使用

使用 chrony 套件配置 NTP