chrony配置的核心答案是:修改/etc/chrony.conf文件,配置server或pool指定时间源,通过allow/deny控制访问权限,设置makestep让系统时间快速同步,最后重启chronyd服务并验证。这篇文章将用最直接的方式,带你从零开始玩转chrony时间同步,覆盖配置文件解读、常见场景实测和坑位避雷,保证你看完能直接上手。
为什么大家都在从NTP迁移到chrony:chrony和ntp区别到底在哪
很多老运维习惯用ntpd守护进程,但近年新装的操作系统默认都带chrony,这是有原因的,业内专家指出,chrony在性能、精度和适应性上全面超越老牌NTP服务,尤其适合现代云计算和虚拟化环境。
chrony的核心优势体现在三个层面:
- 同步速度:系统启动后,chrony可以在十几秒内完成初步时间校准,而ntpd往往需要几分钟到几十分钟的稳定过程,这对服务器快速上线很重要。
- 网络适应性:chrony支持“时间漂移率”的持续追踪,即使网络断开半小时,恢复后也能快速补偿误差,而ntpd在长时间断网后,往往需要手动干预。
- 时钟硬件处理:chrony对服务器硬件时钟的温度漂移、老化效应有更智能的补偿算法,在虚拟机频繁迁移的场景下,chrony的适应性尤其明显。
从配置复杂度看,chrony.conf的语法比ntp.conf更简洁,多数情况下,你只需要写几行server指令就能跑起来,统计显示,国内大部分企业在2026年后新建的Linux服务器,默认初始化的时间同步工具就是chrony。
如果你追求的是毫秒级精度、频繁重启的虚拟机、或者需要在内网搭建时间源,chrony几乎是不二选择,如果你还在用老代码维护老机器,ntpd也并非不能用,但新项目建议直接上chrony。
chrony怎么配置:一份可以直接抄的实战手册
以下配置基于CentOS 7/8、Rocky Linux、Ubuntu 20.04+等主流发行版,操作路径通用,为了满足不同场景,我拆成三步走。
第一步:安装与启动chrony服务
大多数系统默认已安装,未安装时手动操作:
# Debian/Ubuntu apt install chrony -y # RHEL/CentOS/Rocky yum install chrony -y
安装后启动并设为开机自启:
systemctl enable --now chronyd
这里注意,chrony的服务名是chronyd,配置文件是/etc/chrony.conf,别搞混。
第二步:编辑chrony配置文件从简单到进阶
这一节是核心中的核心,打开文件后,默认有几行注释模板,我们按需修改,配置的核心就三件事:用什么源、允不允许别人来同步、时间拉偏了怎么校正。
配置时间源(server/pool/peer)
最常用的是server指令,指向上游NTP服务器:
# 国内常用公共NTP源(公共DNS/简米云) server ntp.aliyun.com iburst server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp.tencent.com iburst # 或者使用pool批量指定(适合自动发现多个源) pool 2.centos.pool.ntp.org iburst

iburst参数的含义是:前四次同步请求快速连发,让初次同步更快收敛,这个参数强烈建议加上,你还可以配置本地硬件时钟作为最后防线:
# 允许使用本地时钟作为后备时间源 local stratum 10
设置允许同步的网段
如果你只做客户端,不对外提供服务,这步可跳过,如果要当内网时间服务器,必须加:
# 允许192.168.1.0/24网段的机器来同步 allow 192.168.1.0/24 # 禁止某个网段 deny 192.168.2.0/24
时间跳跃矫正策略makestep指令
这是最关键但常被忽略的配置,它控制当系统时间与服务器时间偏差很大时,是“一步跳变”还是“缓慢微调”。
# 设置在后三次同步中,如果偏差超过1秒,直接步进校正 makestep 1 3
多数情况下,服务器刚开机时CMOS电池可能走时不准,偏差几十秒到几分钟都不奇怪,如果没有makestep,chrony会花很长时间慢慢调,导致日志时间戳错误、服务启动异常,有了这个参数,前三次同步只要偏差超过1秒就直接跳变,等于快速启动校准。
企业内部环境建议改成更激进的参数:
makestep 0.1 1
含义是只要有0.1秒偏差,第一次同步就校正,这保证关键业务系统的时间精度。
其他高频参数
# 设置chrony上层源的时间评估窗口(默认值够用,可不动) # minpoll 4 # maxpoll 6 # 日志轮转策略 logdir /var/log/chrony
第三步:验证与服务重启
保存配置后,重启服务并验证状态:
systemctl restart chronyd systemctl status chronyd
内网环境chrony时间同步配置:企业局域网的黄金方案
生产环境最典型的场景是:内网机器无法访问外网,需要一台服务器做时间源头,其他机器都指向它,这个场景用chrony配置非常简单。
假设我们有一台内网服务器192.168.3.10,它能访问公网,作为整个内网的时间根。
主时间服务器(192.168.3.10)配置:
# /etc/chrony.conf 核心内容 server ntp.aliyun.com iburst allow 192.168.0.0/16 local stratum 10 makestep 1 3
allow指令让内网机器能访问本机的udp 123端口,local stratum 10的意思是,即使公网断了,这台机器也可以用本地时钟继续为内网提供时间。
内网客户端配置(其他所有机器):
# /etc/chrony.conf server 192.168.3.10 iburst # 注释掉所有其他server/pool行
客户端配置完后,重启chronyd,然后运行chronyc sources -v

查看时间源状态,第一行会显示^(表示当前已同步成功)。
实际测试中,内网通过chrony同步的精度通常在1至1毫秒之间,远优于公网同步的几十毫秒,这个方案也常被用于金融交易系统、日志审计集群、分布式数据库等需要高精度时间戳的场景,如果你有堡垒机、跳板机集群需要时间统一,这个模板可以直接套用。
chrony配置文件参数详解:彻底读懂每一行的含义
网上很多教程只教你抄配置,不解释参数含义,出了问题就抓瞎,这里把最重要的几个参数给你彻底讲透。
| 参数名 | 作用 | 常见取值 | 备注 |
|---|---|---|---|
| server | 指定单次同步服务器 | server 域名 iburst | 可填多个,建议2-4个 |
| pool | 指定多个服务器池 | pool 域名 iburst | 自动发现同一池内多台服务器 |
| local stratum | 本地时钟作为后备源 | local stratum 10 | 无外网时让本机仍能对外提供时间 |
| allow / deny | 访问控制 | allow 192.168.1.0/24 | 默认只允许本机访问 |
| makestep | 时间跳跃策略 | makestep 1 3 | 偏差超过1秒,前3次同步直接跳变 |
| rtcsync | 内核RTC自动同步 | rtcsync | 开启后内核每11分钟同步硬件时钟 |
| logdir | 日志目录 | logdir /var/log/chrony | 按需修改路径 |
还有一个参数必须说明,那就是rtcsync,在很多发行版的默认配置里,这一行是注释掉的,它的作用是让内核周期性把系统时间写回硬件时钟(CMOS), 防止重启后时间又丢了,建议在物理机上开启它:
rtcsync
在虚拟机环境,由于硬件时钟由宿主机虚拟化提供,这个参数重要性稍低,但加上也无妨。
常见的chrony故障排查:三大高频坑位解决思路
配置不生效时,通常不是参数写错,而是几个隐蔽坑位,逐个排查你就能快速定位。
排查1:服务已经启动但状态一直显示“Unsynchronized”
用chronyc tracking查看当前状态,如果显示Leap status为Unsynchronized,表示还没同步成功,常见原因:
- 防火墙拦了udp 123端口,放行命令:
firewall-cmd --add-service=ntp --permanent - 上游时间源无法连通,用
chronyc sources -v查看是否有符号,有则表示该源不可达。 - SELinux拦截,检查
/var/log/chrony目录下日志的Permission denied问题。
排查2:时钟同步后时间跳跃不生效
如果是刚刚修改配置文件,用chronyc makestep强制手动步进一次,再观察是否恢复,如果频繁出现时间跳跃,说明硬件时钟老化严重,考虑更换主板电池或者依赖NTP源做长期微调。

排查3:内网客户端同步失败
客户端如果显示^?,先测试服务端端口是否可达:
telnet 192.168.3.10 123
如果端口通,检查服务端allow配置是否覆盖了客户端网段,注意,allow后配置的掩码是CIDR格式,不允许写255.255.255.0这种写法。
chrony配置的日常维护与监控
配置完成不代表一劳永逸,建议把以下命令加入日常运维巡检清单:
- chronyc tracking:查看系统当前时间偏差、同步源、漂移率。
- chronyc sources -v:查看上游服务器状态,每一行开头的字符表识意义为:
^为当前同步源,^+为可作为备用的源,^?为连接失败。 - chronyc sourcestats -v:查看每个时间源的统计资料,包括延迟和抖动。
- chronyc ntpdata:查看服务器间NTP会话详情,适合深度调优。
用crontab定期将上述输出追加到日志文件,可以形成长期时间质量报表,方便在系统异常时回溯。
chrony配置真正需要记住的核心就三句话:挑好时间源、写好makestep、配好allow网段。把这三件事做好,百分之九十的服务器时间同步问题都能解决,它比NTP配置更简洁、同步更快、容错能力更强,是当前Linux运维时间同步的最优解。
关于chrony配置的常见问题解答
问:chrony配置文件和NTP配置文件可以共存吗?chrony的优先级如何?
chrony的配置文件是/etc/chrony.conf,与NTP的/etc/ntp.conf互不兼容,不能直接混用,两种服务不能同时运行在同一端口,安装chrony后,ntpd服务通常会被自动禁用,如果手动切换,必须先停掉ntpd再启动chronyd,否则会报端口冲突错误。
问:在内网没有外部网络的情况下,如何保证时间尽量准确?
这是企业内网最常见的场景,如果没有GPS或者北斗授时设备,只能依靠服务器的硬件时钟,在配置中启用local stratum,让本机作为时间源对外提供服务,然后设置rtcsync让硬件时钟每11分钟同步一次系统时间,要定期(例如每周)人工或通过运维系统校准该根服务器的时钟,行业共识认为,在没有外部授时源的纯内网环境中,时间精度只能维持在秒级水平,不建议用于对时间极度敏感的交易系统,有条件的公司可以安装NTP专用授时硬件(如北斗GPS双模授时服务器),通过网口接入交换机,精度可达微秒级。
问:为什么我配置了server指令,但系统时间一直没有变化?
先检查偏差量,用chronyc tracking查看System time字段的绝对值,如果偏差在几毫秒以内,chrony会认为已经处于同步状态,不需要大幅调整,如果偏差超过1秒,再检查makestep参数是否生效,偏差过大时chrony会默认拒绝调整,最后检查chrony.log日志,看是否有Net change回执,如果没有,通常是UDP 123端口被防火墙策略拦截。
