Rocky 10:chronyc sources 里那些符号到底在说什么
Rocky Linux 10.2 Server 组虚拟机,chrony-4.8-2.el10。
实验:把本机指向局域网内一台自建时间源(192.168.2.241,stratum 10),观察从「完全不可达」到「已同步」的完整变化。截图:public/evidence/chrony/rocky-client.png。
先看没同步时的样子
Section titled “先看没同步时的样子”$ chronyc sourcesMS Name/IP address Stratum Poll Reach LastRx Last sample===============================================================================^? 192.168.2.241 0 7 0 - +0ns[ +0ns] +/- 0ns^?:不可达或未通过校验;Stratum 0:还没拿到有效时间;Reach 0:最近 8 次探测一次都没收到回复(reach 是 8 位位图,八进制显示);LastRx -:从来没收到过包。
这一行几乎覆盖了「时间不对」的绝大多数原因:不是 chrony 不工作,是它压根没连上。
$ chronyc sources^* 192.168.2.241 10 6 377 23 +2560ns[ +10us] +/- 60us^*:当前选中的同步源(system peer);377:八进制,即二进制11111111,最近 8 次探测全部收到回复;+2560ns:最近一次测量的偏移;方括号里是修正后的值;+/- 60us是估计误差。
$ chronyc tracking | grep -E '^(Reference ID|Stratum|System time|Last offset)'Reference ID : C0A802F1 (192.168.2.241)Stratum : 11System time : 0.000010238 seconds fast of NTP timeLast offset : +0.000015591 seconds上游 10,本机 11;偏移在 10 微秒量级——局域网内直连时间源能到这个精度。

关键坑:客户端也要放行 ntp
Section titled “关键坑:客户端也要放行 ntp”$ firewall-cmd --list-servicescockpit dhcpv6-client ntp sshchrony 默认用 123 作为源端口发查询,因此回复包的目的端口也是 123——客户端入站同样需要放行 ntp。只放行服务端时,客户端会一直停在 ^? / Reach 0,而 ping 完全正常,很容易误判为「网络没问题」。
实测对照:
| 客户端 firewalld | sources 状态 |
|---|---|
| 未放行 ntp | ^?、Reach 0、服务端 NTP packets received: 0 |
| 放行 ntp 后 | ^*、Reach 377、offset 微秒级 |
| 符号 | 含义 | 处理 |
|---|---|---|
^* | 当前同步源 | 正常 |
^+ | 合格候选,未选中 | 正常(多源时) |
^- | 被判定为异常/离群 | 检查该源 |
^? | 不可达或未通过校验 | 先查网络与端口 |
^x | falseticker(与多数源矛盾) | 排除该源 |
Reach 是八进制位图:377=255=全通,1=只有最近一次成功,0=全失败。
- 只看
chronyc tracking的 Stratum 0 就说「没配」:先看sources的 reach; - 忘记客户端放行 ntp:如上;
systemctl restart chronyd后立刻判断:首个包要等几秒,Reach需要几轮才稳定;- server 行写在
pool之后:两者可共存,但多源时 chrony 会挑最优,别只留一条又期待它被选中。
练习:把状态变化看清楚
Section titled “练习:把状态变化看清楚”chronyc sourcessudo firewall-cmd --list-servicessudo chronyc tracking | grep -E '^(Reference ID|Stratum|System time)'sudo chronyc sourcestats | head -4检查:
sources里符号是^*还是^?;Reach是否接近377;tracking的Reference ID是否解析成你的时间源 IP;sourcestats的Freq Skew是否在可接受范围(局域网通常 < 100 ppm)。
常见问题
Reach 为什么用八进制?
它是 8 次探测的位图,chrony 用八进制显示以节省宽度:377 = 最近 8 次全部成功。
offset 多大算正常?
局域网内直连通常 < 100 微秒;跨公网 1–10 毫秒;持续几百毫秒说明链路或上游有问题。
需要 makestep 吗?
虚拟机首次启动偏差大时可在 chrony.conf 配 makestep 1.0 3,让前 3 次更新直接跳变而非缓慢调整。
- 离线更新源:/offline-updates/
- 定时器:/systemd-timers/