BusyBox ntpd修改系统时间后无法重新同步的问题排查
BusyBox NTPD 手动修改系统时间后未自动同步的问题解析
最近我在研究BusyBox自带的ntpd工作机制时,碰到了一个有点反直觉的现象,先把我的测试流程和发现跟大家梳理下:
测试步骤
- 用
date -s命令手动设置系统时间到一个旧时间,比如:date -s "2000-01-01 00:00:00" - 执行
ntpd -N -p <server_address>启动ntpd守护进程,这一步很顺利,系统时间成功同步到了NTP服务器的正确时间 - 再次用
date -s把时间改回2000年的那个点,原本以为ntpd会再次把时间拉回正确值,但实际完全没反应
为什么会出现这种情况?
这其实是BusyBox ntpd的轻量级设计特性导致的。和完整功能的NTP守护进程不同,BusyBox的ntpd做了很多简化适配嵌入式场景:
- 它默认只在启动阶段处理大幅时间偏差(一般是超过1000秒的差距),启动完成后,它只会专注于修正小幅度的时间漂移,不会监控这种手动强制修改带来的大幅时间跳变——它会默认认为这种跳变是异常操作,而非正常的时钟走时误差
- 另外,它的同步检查间隔相对较长,也没有内置针对手动改时间的触发同步逻辑
怎么解决这个问题?
如果想要让BusyBox ntpd在手动改时间后重新同步,可以试试这两个方法:
- 直接重启ntpd守护进程:
pkill ntpd && ntpd -N -p <server_address>,重启后它会重新检测时间偏差并完成同步 - 如果你的BusyBox版本支持
-g参数,启动时加上它:ntpd -N -g -p <server_address>,这个参数会允许ntpd在运行过程中处理大幅时间偏差,即使已经启动后遇到手动改时间的情况,也会尝试重新同步
内容的提问来源于stack exchange,提问作者Valmir
相关产品推荐
相关产品推荐

