我有一台用于灌溉系统的树莓派。问题是它没有硬件时钟,所以每次重启时系统时间都是错误的,而且我无法将其设置为自动同步。
我发现当系统时间错误时,DNS请求不起作用,所以每次我尝试发送请求时我都会得到:
[root@alarmpi me]# ntpdate 3.es.pool.ntp.org
Error resolving 3.es.pool.ntp.org: Name or service not known (-2)
12 Aug 15:37:15 ntpdate[2385]: Can't find host 3.es.pool.ntp.org: Name or service not known (-2)
12 Aug 15:37:15 ntpdate[2385]: no servers can be used, exiting
顺便说一句,如果我尝试使用 pacman、wget、python/requests 甚至 ping...,我都会遇到相同的连接错误。所以这肯定是 DNS 的问题。
[me@alarmpi ~]$ ping google.com
ping: google.com: Name or service not known
如果我手动设置时间和日期,它会再次工作,但我住在距离这个东西 300 公里的地方,而且每天停电时我都无法手动进行设置。
[root@alarmpi me]# timedatectl
Local time: Mon 2019-08-12 15:47:40 CEST
Universal time: Mon 2019-08-12 13:47:40 UTC
RTC time: n/a
Time zone: Europe/Madrid (CEST, +0200)
System clock synchronized: no
NTP service: active
RTC in local TZ: no
[root@alarmpi me]# timedatectl set-ntp false
[root@alarmpi me]# timedatectl set-time "2019-08.13 10:45:45 CEST"
[root@alarmpi me]# ping google.com
PING google.com (172.217.168.174) 56(84) bytes of data.
64 bytes from 172.217.168.174 (172.217.168.174): icmp_seq=1 ttl=54 time=22.7 ms
64 bytes from 172.217.168.174 (172.217.168.174): icmp_seq=2 ttl=54 time=31.6 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 292ms
rtt min/avg/max/mdev = 22.739/27.161/31.583/4.422 ms
[root@alarmpi me]# ntpdate 3.es.pool.ntp.org
13 Aug 10:49:54 ntpdate[2498]: adjust time server 37.139.121.60 offset 0.004894 sec
所以我有点迷茫了。如果由于不同步而导致我连接服务,我该如何自动同步时钟?
答案1
一些 NTP 服务器直接监听 IP 地址,并向外界公布自己的身份。例如,美国国家标准与技术研究院为每个 NTP 服务器提供 IP,因此您可以选择一个并ntpdate <IP>
在初始化时执行。这不需要 DNS 解析,并且应该可以立即工作。
或者,您也可以尝试使用fake-hwclock
保留两次重启之间大致时间的软件包。它并不完美,也无法提供准确的时间,但它可能足以解析 NTP 的域名。