在使用蓝莓派时,使用到了NTP相关的功能,因为蓝莓派没有RTClinux同步时间服务器,每次开机后时间就会变为2016年,此时须要NTP进行校时。
原本是不想写这篇文章的,由于各大新版本的linux发行版,都早已使用timedatectl代替了ntpd、ntpdate等工具linux系统安装,如今还在跟他较劲似乎是不合适的。但环境不能变,其实还有同伴跟我遇见一样的问题,那就把我碰到的问题整理一下。
现象
在联网环境下,蓝莓派可以获得正确时间,但在外网环境中使用外网NTP服务器时,却未能获得正确时间。
使用ntpq-p命令查看时,配置好的ntp早已显露下来了linux同步时间服务器,而且上面并没有*星号,表示没有使用该服务器。
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
大约如同这个样子。
测试NTPServer是否正常命令
若果测试不过的话,那先把对方的Ntpserver搞定才往下摆弄吧^_^
Windows下:
w32tm /stripchart /computer:<NTP服务器的IP地址>
Linux下:
ntpdate -d <NTP服务器的IP地址>
Linux配置调试命令
参考链接1:关于ntpq更具体的说明,可以参见ntp解读
参考链接2:其他可用文档可以参见Howtodebugntpissues
使用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命令即可获取更详尽的信息。
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文件中,添加tinkerpanic0即可
2、NTP还拥有一个tosmaxdist参数北京linux培训,Linux的NTP不会信任误差超过1.5s的的时钟源,Windows的W3232Time作为NTP时钟服务是不被认可的,会出现被拒绝的情况。
解决方案参考链接:链接
总结
目前发觉了这两个参数会影响ntp同步,坑太多了,还好早已被新的timedatectl代替了,可喜可贺