chronyd 替代 ntpd 须修改三类配置:server 行删 iburst/preempt 改用 weight;driftfile 路径权限需匹配 chrony 用户;restrict 移除,改用 allow/cmdallow 控制访问;rtcsync 默认启用,应停用 hwclock 定时任务。

chronyd 替代 ntpd 后,直接复用旧 ntp.conf 几乎必然出问题——语法不兼容、语义变化、默认行为反转,是迁移中最常被忽略的三类坑。
server 行不支持 iburst 和 preempt 等 ntpd 专用选项
chronyd 的 server 指令只认有限参数:offline、minpoll、maxpoll、weight、trust。像 iburst(快速初始同步)在 chronyd 中是默认开启且不可关闭的;preempt(抢占式选择源)根本不存在——chronyd 用的是加权选源算法,不依赖该标记。
- ❌ 错误写法:
server 192.168.1.10 iburst prefer - ✅ 正确写法:
server 192.168.1.10 trust(如需优先使用,改用weight调高权重,例如weight 5)
driftfile 路径和权限必须匹配 chronyd 运行用户
ntpd 通常以 root 运行,driftfile 可放在 /var/lib/ntp/drift;chronyd 默认以 chrony 用户运行(非 root),若沿用原路径且未赋权,启动时会静默跳过 drift 记录,导致长期漂移累积。
- 确认 chronyd 用户:查
/etc/chrony.conf中user指令,或看 systemd service 文件中User=设置 - 修改 driftfile 到可写路径,例如:
driftfile /var/lib/chrony/drift - 执行:
sudo chown chrony:chrony /var/lib/chrony/drift && sudo chmod 644 /var/lib/chrony/drift
restrict 指令被完全移除,访问控制改用 cmdallow/cmddeny + allow/deny
chronyd 不解析 restrict,遇到就报 warning 并跳过整行。网络访问控制拆为两类:
– allow/deny:控制 NTP 时间同步请求(即谁可以向本机问时间)
– cmdallow/cmddeny:控制 chronyc 命令行访问(即谁可以用 chronyc 查状态、调时间)
- ❌ 旧配置:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer noquery - ✅ 对应新写法:
allow 192.168.1.0/24(允许同步)+cmdallow 127.0.0.1(仅本地可执行 chronyc) - 注意:
allow默认是拒绝所有,必须显式放行;而cmdallow默认也是拒绝,不配就无法用chronyc tracking等命令
硬件时钟同步逻辑反转:rtcsync 默认启用,但 hwclock 操作由系统服务接管
ntpd 用 tick 和 step 配合 hwclock --systohc 定期写入 RTC;chronyd 的 rtcsync 是内核级同步(通过 CLOCK_REALTIME 关联 CLOCK_TAI),无需用户调用 hwclock,且默认开启。
- 如果还保留
hwclock --systohc的 cron 或 systemd timer,可能和 rtcsync 冲突,造成 RTC 时间跳变 - 检查是否有多余的硬件时钟写入:运行
systemctl list-timers | grep -i clock,停用systemd-timesyncd或自定义 hwclock 服务 - 如需禁用 rtcsync,加
no_rtcsync到 chrony.conf,但一般不建议










