如何强制NTPD在启动后更新日期/时间?


63

Raspberry Pi缺少硬件时钟。如何强制NTPD在每次启动后立即更新日期/时间?

我正在运行Raspbian,并且Raspberry Pi是使用以太网电缆连接的。


我的已经开箱即用了。您正在使用什么音乐?
Gerben

Raspbian Wheezy
Alessandro Da Rugna 2013年

以某种方式按
原样

1
@Thorb Pi通过以太网电缆/ dhcp连接。它根本无法在启动后获得有效日期,需要一段时间(10到45分钟)
Alessandro Da Rugna 2013年

1
几分钟后,它将自动执行。确保您有设置为使用主时钟,美国国家标准局,time.nist.gov如下所述: raspberrypi.stackexchange.com/questions/68811/...
SDsolar

Answers:


40

做一个apt-get install ntpdate

ntpdate将在启动以太网接口时运行,并设置来自ntp服务器的时间(请参阅参考资料/etc/default/ntpdate)。

如果ntpd正在运行,则ntpdate不会执行任何操作,但是ntpdatentpd在启动之前运行-因此,只要有以太网连接,这应该可以设置启动时间。


Raspbian将拥有所有这些。
凌晨

7
@scruss我的没有。(2013-02-09 wheezy rasbian)
皮特·

1
我的也没有,必须手动进行。
vaindil

如果设置正确,它将自动执行-尽管可能需要几分钟。
SDsolar

Linux raspberrypi 4.14.30-v7+ #1102 SMP Mon Mar 26 16:45:49 BST 2018 armv7l GNU/Linux也没有。
emix

36

如果时钟不正确,您可能需要通过执行以下操作来强制ntp同步:

sudo /etc/init.d/ntp stop
sudo ntpd -q -g
sudo /etc/init.d/ntp start

1
它返回错误“ sudo:ntpd:找不到命令”
皮格马利翁

1
必须安装ntpd才能使用命令
thaspius,2016年

3
安装,我不是那么无知:)
皮格马利翁

您能否访问raspberrypi.stackexchange.com/questions/47542/…?我在那儿张贴了细节。
皮格马利翁

3
这绝对是解决我的问题的方法,但是我发现它是暂时的,直到重新启动为止。最终,我在关机中遇到了一个错误,即它无法更新hwclock,因为hw时钟有一个未来的日期(不知道那是怎么回事)。但是解决方案是更新时钟。这迫使更新到伪造的硬件时钟,然后在启动时时间至少接近当前时间,因此ntp可以正常完成它的工作。
Piwaf

34

经过搜索,这种方法对我有用。如您所知,Raspberry Pi 3默认情况下禁用NTP。因此,只需输入以下内容,即可启用NTP支持:

sudo timedatectl set-ntp True

检查结果 timedatectl status

如果出现警告,您可能也必须运行sudo timedatectl set-local-rtc true


谢谢,这终于帮助了我,尽管有先前的回答,但这似乎是正确的方法。
CharlieS

1
那是最好的答案,对我帮助很大。您可以使用'sudo'来避免输入密码(对于运行密码的脚本很有用)。seconds命令的目的是什么?set-local-rtc
Arad

12

如果您在raspi-configRaspberry Pi中设置了时区,则在连接到Internet时会自动更新启动时间。

  1. sudo raspi-config
  2. 选择 Internationalisation Options
  3. 选择 I2 Change Timezone
  4. 选择您的地理区域
  5. 选择最近的城市
  6. 选择 Finish
  7. 选择Yes立即重启

这对我来说效果很好
AlexG

I2 Change Timezone选项已不存在

12

请参阅论坛帖子。时间在Pi 3上并没有与官方加密狗同步

ntpd发出ToS字段设置为0xc0的IP / UDP数据包。因此,这与我(和许多其他人)在通过Wi-Fi内部接口进行操作时对Raspberry Pi3遇到的其他问题非常相似。

解决方法是,添加命令

/sbin/iptables -t mangle -I POSTROUTING 1 -o wlan0 -p udp --dport 123 -j TOS --set-tos 0x00

到文件

/etc/rc.local

在出口0行之前。接下来,重新启动并检查。


1
我遇到了与为XMas安装的RPi3相同的问题,并且您解决了我的问题。太好了!
jfmessier

8

它应该已经在更新时间了。NTPD服务器应在交换文件之后和SSHD之前启动。

检查您的/etc/ntp.conf文件以确保已配置它。

它应该列出至少一台服务器。我将time.nrc.ca用于服务器。

ntp.conf的手册页在这里:http : //linux.die.net/man/5/ntp.conf


3

我儿子的Rasberry Pi无法即时更新时间,在尝试了上述所有建议之后,我可以手动更新而不是自动更新。最后,在寻找其他地方也没有成功之后,我发现Rasberry Pi随附的ntp.conf文件注释了以下几行:

#restrict 127.0.0.1
#restrict ::1

我用了

sudo nano /etc/ntp.conf

在终端中将ntp conf文件编辑为现在:

# Local users may interrogate the ntp server more closely. 
restrict 127.0.0.1
restrict ::1

那为我们解决了问题。它同时使用WiFi和以太网电缆进行更新。我不知道是否可以在不更改上述rc.local的情况下使用WiFi更新,因为当我找到上述解决方案时,我已经进行了更改,但还没有撤消。


2

timedatectl当我遇到类似问题时,我发现了该应用程序可以为我提供帮助。默认情况下已安装该工具,并且'--help'提供了有关如何使用该工具的很好的概述。

注意:请确保您的时区设置正确,此工具也可以做到。


1

这就是我最终采用的方法。当我查看Raspian系统时,其中许多答案似乎都表明没有检查出以下内容:

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

我的日志中没有timedatectl任何内容表明正在执行任何操作,或者ntp正在NIC的up状态进行同步,甚至没有安装/配置NTPD。

最后,我只是将其添加到我的/etc/rc.local

$ cat /etc/rc.local
logger "Beginning force syncing NTP..."
service ntp stop
ntpd -gq
service ntp start
logger "Finished force syncing NTP..."

并安装ntp

$ sudo apt-get install ntp

结果导致/var/log/syslog

Aug  5 09:10:20 pi-hole ntp[526]: Starting NTP server: ntpd.
Aug  5 09:10:20 pi-hole ntpd[555]: proto: precision = 1.458 usec (-19)
Aug  5 09:10:20 pi-hole ntpd[555]: Listen and drop on 0 v6wildcard [::]:123
Aug  5 09:10:20 pi-hole ntpd[555]: Listen and drop on 1 v4wildcard 0.0.0.0:123
Aug  5 09:10:20 pi-hole ntpd[555]: Listen normally on 2 lo 127.0.0.1:123
Aug  5 09:10:20 pi-hole ntpd[555]: Listen normally on 3 eth0 192.168.1.85:123
Aug  5 09:10:20 pi-hole ntpd[555]: Listen normally on 4 lo [::1]:123
Aug  5 09:10:20 pi-hole ntpd[555]: Listen normally on 5 eth0 [fe80::f5ea:7663:4ec:784d%2]:123
Aug  5 09:10:20 pi-hole ntpd[555]: Listening on routing socket on fd #22 for interface updates
Aug  5 09:10:21 pi-hole ntpd[555]: ntpd exiting on signal 15 (Terminated)
Aug  5 09:10:21 pi-hole ntp[661]: Stopping NTP server: ntpd.
Aug  5 09:10:21 pi-hole ntpd[674]: ntpd 4.2.8p10@1.3728-o Sat Mar 10 18:03:33 UTC 2018 (1): Starting
Aug  5 09:10:21 pi-hole ntpd[674]: Command line: ntpd -gq
Aug  5 09:10:21 pi-hole ntpd[674]: proto: precision = 0.625 usec (-21)
Aug  5 09:10:21 pi-hole ntpd[674]: Listen and drop on 0 v6wildcard [::]:123
Aug  5 09:10:21 pi-hole ntpd[674]: Listen and drop on 1 v4wildcard 0.0.0.0:123
Aug  5 09:10:21 pi-hole ntpd[674]: Listen normally on 2 lo 127.0.0.1:123
Aug  5 09:10:21 pi-hole ntpd[674]: Listen normally on 3 eth0 192.168.1.85:123
Aug  5 09:10:21 pi-hole ntpd[674]: Listen normally on 4 lo [::1]:123
Aug  5 09:10:21 pi-hole ntpd[674]: Listen normally on 5 eth0 [fe80::f5ea:7663:4ec:784d%2]:123
Aug  5 09:10:21 pi-hole ntpd[674]: Listening on routing socket on fd #22 for interface updates
Aug  5 09:10:34 pi-hole ntpd[674]: Soliciting pool server 198.98.57.16
Aug  5 09:10:35 pi-hole ntpd[674]: Soliciting pool server 74.82.59.149
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 23.131.160.7
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 52.37.26.163
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 204.2.134.163
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 96.126.100.203
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 199.223.248.101
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 66.228.42.59
Aug  5 09:10:36 pi-hole ntpd[674]: Soliciting pool server 208.75.89.4
Aug  5 09:10:37 pi-hole ntpd[674]: Soliciting pool server 204.2.134.164
Aug  5 09:10:37 pi-hole ntpd[674]: Soliciting pool server 104.236.116.147
Aug  5 09:10:38 pi-hole ntpd[674]: Soliciting pool server 204.9.54.119
Aug  5 09:10:48 pi-hole ntpd[674]: ntpd: time set +6.769186 s
Aug  5 09:10:49 pi-hole ntpd[853]: ntpd 4.2.8p10@1.3728-o Sat Mar 10 18:03:33 UTC 2018 (1): Starting
Aug  5 09:10:49 pi-hole ntpd[853]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:114
Aug  5 09:10:49 pi-hole ntp[844]: Starting NTP server: ntpd.
Aug  5 09:10:49 pi-hole ntpd[856]: proto: precision = 0.625 usec (-21)
Aug  5 09:10:49 pi-hole ntpd[856]: Listen and drop on 0 v6wildcard [::]:123
Aug  5 09:10:49 pi-hole ntpd[856]: Listen and drop on 1 v4wildcard 0.0.0.0:123
Aug  5 09:10:49 pi-hole ntpd[856]: Listen normally on 2 lo 127.0.0.1:123
Aug  5 09:10:49 pi-hole ntpd[856]: Listen normally on 3 eth0 192.168.1.85:123
Aug  5 09:10:49 pi-hole ntpd[856]: Listen normally on 4 lo [::1]:123
Aug  5 09:10:49 pi-hole ntpd[856]: Listen normally on 5 eth0 [fe80::f5ea:7663:4ec:784d%2]:123
Aug  5 09:10:49 pi-hole ntpd[856]: Listening on routing socket on fd #22 for interface updates
Aug  5 09:10:49 pi-hole root: Finished force syncing NTP...

在最小的树莓派上不起作用:Failed to start ntp.service: Unit ntp.service not found.ntpd也不存在。Pi最终肯定会赢得时间。(我正在研究这个问题,因为在此之前运行时,我的HTTPS卷发在没有-k的情况下失败了)
Steven Lu

@StevenLu-我将更新A'er,以包括ntp的安装。
slm

@StevenLu-– apt-get install ntp
slm

1

您无需使用ntp即可解决此问题。有一个脚本可以从服务器读取日期,您只需要将日期设置为该脚本的结果即可(您的Raspberry Pi需要连接到互联网)。然后,您需要在启动时运行该命令。

步骤1:从服务器检索日期。

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"

步骤2:在启动时通过将命令添加到文件中来运行该命令/etc/rc.local(在Ubuntu 16.04上有效)。

sudo gedit /etc/rc.local

学分:

1- https://askubuntu.com/a/655528/572294

2- https://askubuntu.com/a/1199/572294


0

我在默认映像上使用以下命令来同步时间,而无需安装其他程序包:

timedatectl set-local-rtc 0
timedatectl set-ntp 1
timedatectl status
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.