在使用树莓派时,使用到了NTP相关的功能,由于树莓派没有RTC,每次开机后时间都会变为2016年,此时需要NTP进行校时。
本来是不想写这篇文章的,因为各大新版本的linux发行版,都已经使用timedatectl取代了ntpd、ntpdate等工具,现在还在跟他较劲其实是不合适的。但环境不能变,或许还有同伴跟我遇到一样的问题,那就把我遇到的问题整理一下。
现象
在联网环境下,树莓派可以获得正确时间,但在内网环境中使用内网NTP服务器时,却无法获得正确时间。
使用ntpq -p命令查看时,配置好的ntp已经展现出来了,但是前面并没有 * 星号,表示没有使用该服务器。
remote refid st t when poll reach delay offset jitter
==============================================================================
120.25.115.20 10.137.53.7 2 u 43 64 377 49.203 -0.294 0.224
大概就像这个样子。
测试NTP Server是否正常命令
如果测试不过的话,那先把对方的Ntp server搞定才往下鼓捣吧^_^
Windows下:
w32tm /stripchart /computer:<NTP服务器的IP地址>
Linux下:
ntpdate -d <NTP服务器的IP地址>
Linux配置调试命令
参考链接1:关于ntpq更具体的说明,可以参见 ntp详解
参考链接2:其他可用文档可以参见How to debug ntp issues
使用ntpq命令进入到交互模式,然后输入as命令,既可以查看服务器的状态
ntpq> as
ind assid status conf reach auth condition last_event cnt
===========================================================
1 57887 963a yes yes none sys.peer sys_peer 3
其中condition一列为当前状态。我之前出现了reject的字样,表示ntp拒绝使用该地址。
assid可以利用它具体查看当前id的状态。
使用rv <assid>命令即可获取更详细的信息。
ntpq> rv 57887
associd=57887 status=963a conf, reach, sel_sys.peer, 3 events, sys_peer,
srcadr=120.25.115.20, srcport=123, dstadr=192.168.0.223, dstport=123,
leap=00, stratum=2, precision=-25, rootdelay=0.107, rootdisp=1.007,
refid=10.137.53.7,
reftime=e43ceba8.670ac35b Wed, May 5 2021 18:02:16.402,
rec=e43cebaf.35f3e35f Wed, May 5 2021 18:02:23.210, reach=377,
unreach=0, hmode=3, pmode=4, hpoll=6, ppoll=6, headway=17, flash=00 ok,
keyid=0, offset=-0.363, delay=49.355, dispersion=4.420, jitter=0.310,
xleave=0.096,
filtdelay= 49.57 49.37 49.40 49.94 49.36 49.78 49.35 49.50,
filtoffset= 0.04 -0.08 -0.08 0.12 -0.19 -0.06 -0.36 -0.42,
filtdisp= 0.00 0.99 1.97 2.93 3.90 4.88 5.87 6.86
其中flash=00为状态码,可以根据参考链接2文章中的内容进行排错。
原因总结
1、NTP拥有一个panic参数,默认为1000,含义为当服务器时间与本地时间超过1000s秒是,ntp会拒绝修改。这是引起内网中无法进行校正的一个原因。在ntp.conf文件中,添加tinker panic 0即可
2、NTP还拥有一个tos maxdist参数,Linux的NTP不会信任偏差超过1.5s的的时钟源,Windows的W32Time作为NTP时钟服务是不被认可的,会出现被拒绝的情况。
解决方案参考链接:链接
总结
目前发现了这两个参数会影响ntp同步,坑太多了,还好已经被新的timedatectl取代了,可喜可贺
本文介绍了树莓派在无RTC情况下使用NTP进行时间同步的问题,当连接内网NTP服务器时无法正确同步时间。通过ntpq命令分析,发现服务器状态未被使用。问题可能由ntp的panic参数和tosmaxdist参数导致,解决方案包括调整配置文件以允许更大时间差和解决NTP信任问题。推荐使用新工具timedatectl代替ntp进行时间管理。
694

被折叠的 条评论
为什么被折叠?



