介绍

Chrony 是NTP(Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现,与ntpd不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。

​chrony​​​ 是两个用来维持计算机系统时钟准确性的程序,这两个程序命名为 ​​chronyd​​​ 和 ​​chronyc​​。

  • chronyd是一个在系统后台运行的守护进程。主要用于调整内核中运行的系统时间和时间服务器同步,他根据网络上其他时间服务器时间来测量本机时间的偏移量从而调整系统时钟。对于孤立系统,用户可以手动周期性的输入正确时间(通过chronyc)。在这两种情况下,chronyd决定计算机快慢的比例,并加以纠正。chronyd实现了NTP协议并且可以作为服务器或客户端。
  • chronyc是用来监控chronyd性能和配置其参数的用户界面。他可以控制本机及其他计算机上运行的chronyd进程。

服务unit文件:​​/usr/lib/systemd/system/chronyd.service​​​,如果有防火墙请注意监听端口 ​​323/udp​​​、​​123/udp​​ 的配置。

配置文件

chrony 的配置文件为 ​​/etc/chrony.conf​​,相关参数说明如下表

参数

说明

server

可用于时钟服务器,iburst 选项当服务器可达时,发送八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度

pool

该指令的语法与server 指令的语法相似,不同之处在于它用于指定NTP服务器池而不是单个

driftfile

chronyd程序的主要行为之一,就是根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。

rtcsync

启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)

allow/deny

这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。

cmdallow/cmddeny

跟上面相类似,只是你可以指定哪个IP地址或哪台主机可以通过chronyd使用控制命令

bindcmdaddress

该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级

makestep

通常,chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效

local stratum 10

当server中提供的公网NTP服务器不可用时,采用本地时间作为同步标准

keyfile

指定包含NTP验证密钥的文件

logdir

指定日志文件的目录

配置文件示例:

server ntp1.aliyun.com iburst  # 阿里的时钟同步源
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync # 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow 192.168.0.0/16 # allow/deny 这里你可以指定一台具体的主机、一个子网、或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器(该选项在需要把当前服务器当做时间服务器时配置)
local stratum 10 # 当server中提供的公网NTP服务器不可用时,采用本地时间作为同步标准(需要把当前服务器当做时间服务器时需要开启该选项)
logdir /var/log/chrony # 指定日志文件的目录

修改配置文件后需要重启 chrony 服务,验证是否生效的方法就是使用 ​​date -s "2022-02-22 22:22:22"​​​ 手工修改一下时间,然后再执行 ​​chronyc makestep​​ 后查看时间能否同步到最新时间。

其中 ​​server​​​ 后面的选项 ​​iburst​​​ 的作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包(八个包而不是通常的一个)给 NTP 服务器,如果在短时间内呼叫 NTP 服务器几次,没有出现可辨识的应答,那么本地时间将不会变化。你还可以使用选项 ​​prefer​​​ 表示优先使用该时间服务器。
​​​prefer​​​ 和 ​​iburst​​​ 是可以同时使用的,例如 ​​server ntp1.aliyun.com prefer iburst​​。

相关命令

## 查看 ntp_servers 状态
chronyc sources -v
## 查看 ntp_sync 状态
chronyc sourcestats -v
## 查看 ntp_servers 是否在线
chronyc activity -v
## 立刻手动同步
chronyc makestep
## 显示系统时间信息
chronyc tracking

## 启动以及启用开机自启
systemctl start chronyd
systemctl enable chronyd
## 查看状态
systemctl status chronyd
## 停止以及禁用开机自启
systemctl stop chronyd
systemctl disable chronyd

设置时区

# 查看在亚洲 S 开头的上海可用时区
timedatectl list-timezones | grep -E "Asia/S.*"

# 设置时区为 Asia/Shanghai
timedatectl set-timezone "Asia/Shanghai"

(END)