chronyd 的 makestep 不等价于 ntpd 的 -g 或 -x:它默认禁用步进,需显式配置阈值与次数(如 makestep 1.0 3),且仅在启动或网络恢复时触发;-1 表示无限制次数但仅首次同步有效。

chronyd 的 makestep 配置不等于 ntpd 的 -g 或 -x
很多人以为把 ntpd 启动参数 ntpd -g -x 直接对应到 chronyd 就是加个 makestep,其实不是。chronyd 默认**完全禁止步进(step)时间**,哪怕偏差几小时也不会跳;而 makestep 是显式开启“允许跳变”的开关,但必须配阈值和次数,否则无效。
-
makestep 1.0 3表示:偏差超过 1 秒时允许最多 3 次步进(每次只在启动或网络恢复时触发) - 漏写数字(如只写
makestep)→ 配置语法错误,chronyd启动失败 - 设成
makestep 0.5 -1→ 允许任意次数的 ≤0.5 秒步进,但重启后仍只生效一次(-1 不代表“永远”,而是“无限制次数”,但仅对首次同步有效) - ntpd 的
-g是单次强制容忍大偏差,chronyd 中没有等价的“启动即强制校正”行为,必须靠makestep+ 正确时机(如系统刚开机、网络连通后)
iburst 是默认行为,但 burst 不能混用
ntpd 配置里常见 server pool.ntp.org iburst,迁移到 chronyd 时容易误加 burst —— 这是错的。iburst 在 chronyd 中是默认启用的(只要没显式禁用),而 burst 是一个高风险指令:它会让 chronyd 在短时间内密集发包(每 2 秒一次,持续 8 次),可能被 NTP 服务器限速甚至拉黑。
- 正确写法:
server ntp1.aliyun.com iburst prefer(iburst可省略,但保留更清晰) - 错误写法:
server ntp1.aliyun.com burst→ 可能触发服务器拒绝响应,chronyc sources显示 `^?` 状态 - chronyd 没有 ntpd 的
minpoll/maxpoll概念,轮询间隔由算法自动调节,强行干预反而降低稳定性
driftfile 路径和权限必须匹配 systemd 服务运行用户
ntpd 默认以 ntp 用户运行,/var/lib/ntp/drift 归属 ntp:ntp;chronyd 默认以 chrony 用户运行,但很多迁移者直接复用原路径,导致启动失败:
- 错误现象:
systemctl status chronyd显示 “Failed to open drift file” 或 “Permission denied” - 正确做法:确保
driftfile /var/lib/chrony/drift存在,且目录归属chrony:chrony,文件可写 - 别忽略 SELinux:若开启,需执行
restorecon -Rv /var/lib/chrony,否则即使权限对也会被拦截 - chronyd 不会自动创建
/var/lib/chrony目录,必须手动mkdir -p /var/lib/chrony && chown chrony:chrony /var/lib/chrony
服务依赖关系变了:chronyd 不再需要 ntpdate 预热
ntpd 生态中常习惯先跑 ntpdate -s ntpserver 再启 ntpd,认为这样能“缩短收敛时间”。chronyd 完全不需要这一步 —— 它启动时会主动做快速初始同步(靠 iburst 和 makestep),且自带偏移补偿模型。强行加 ntpdate 反而破坏 chronyd 的内部状态估算。
- 典型错误:
systemctl enable ntpdate && systemctl start ntpdate和chronyd并存 → 两个服务争抢系统时钟,chronyc tracking显示Offset波动剧烈 - 必须停用并屏蔽旧服务:
systemctl stop ntpdate ntpd && systemctl disable ntpdate ntpd - 验证是否干净:
ss -tuln | grep ':123'应只看到chronyd占用 UDP 123 端口
iburst 名字一样、行为却更克制;makestep 看似简单,实则绑定启动时机与误差容忍策略。迁移时别逐行复制,得重读每个指令在 chronyd 上的实际语义。










