我在基于 ARM 的嵌入式系统上运行 Ubuntu,该系统缺少电池支持的 RTC。唤醒时间在 1970 年左右。因此,我使用 NTP 服务将时间更新为当前时间。
/etc/rc.local
我在文件中添加了以下行:
sudo ntpdate -s time.nist.gov
但是启动后,仍需要几分钟才能更新时间,在此期间我无法有效地使用tar
和make
。
如何在任何给定时间强制更新时钟?
更新 1:以下内容(感谢 Eric 和 Stephan)在命令行上运行良好,但在输入时无法更新时钟/etc/rc.local
:
$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan 1 00:00:58 UTC 1970
* Stopping NTP server ntpd [ OK ]
* Starting NTP server [ OK ]
Thu Feb 14 18:52:21 UTC 2013
我究竟做错了什么?
更新2:我尝试按照第一次更新后的一些建议去做,但似乎没有什么能真正达到预期的效果。以下是我尝试的方法:
- 更换服务器
us.pool.ntp.org
- 使用程序的明确路径
- 删除所有
ntp
服务,只sudo ntpdate ...
保留rc.local
sudo
从上面的命令中删除rc.local
使用上述方法,机器仍从 1970 年开始。但是,当登录后从命令行执行此操作(通过ssh
)时,只要我调用,时钟就会更新ntpdate
。
我做的最后一件事是从中删除它并在文件中rc.local
调用。这确实按预期更新了时钟,并且一旦命令提示符可用,我就会获得真实的当前时间。ntpdate
.bashrc
然而,这意味着如果机器已打开,但没有用户登录,则时间永远不会更新。当然,我可以重新安装服务,ntp
这样至少时钟会在启动后几分钟内更新,但之后我们又回到了原点。
那么,为什么ntpdate
在 中放置命令rc.local
无法执行所需的任务,而在 中执行命令却可以.bashrc
正常工作呢?
答案1
答案2
可能ntp
服务正在运行,这就是为什么ntpdate
无法打开套接字(端口 123 UDP)并连接到 ntp 服务器。
从命令行尝试:
sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start
如果您想要使用此功能,请执行/etc/rc.local
以下操作:
( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&
答案3
使用timedatectl
(systemd 服务单元)设置时间。ntp
已被弃用。
sudo systemctl restart systemd-timesyncd.service
您可以通过阅读日志来检查更新时间journalctl -xe | tail
。
状态 timedatectl status
并进行配置/etc/systemd/timesyncd.conf
。
参考
- Ubuntu 服务器文档
- 自由桌面
man timesyncd.conf
答案4
正如其他人指出的那样,最好的解决方案是指示 ntpd 忽略恐慌阈值,默认情况下该阈值为 1000 秒。您可以通过以下两种方式之一配置恐慌阈值:
- 编辑
/etc/default/ntp
并确保 -g 选项存在。 - 编辑 /etc/ntp.conf 并放在
tinker panic 0
顶部
到目前为止,这基本上是其他人所推荐的,但是我认为你应该采取另一个步骤。安装 fake-hwclock 程序:
# apt-get install fake-hwclock
fake-hwclock: Save/restore system clock on machines without working RTC hardware
Some machines don't have a working realtime clock (RTC) unit, or no
driver for the hardware that does exist. fake-hwclock is a simple set
of scripts to save the kernel's current clock periodically (including
at shutdown) and restore it at boot so that the system clock keeps at
least close to realtime. This will stop some of the problems that may
be caused by a system believing it has travelled in time back to
1970, such as needing to perform filesystem checks at every boot.
On top of this, use of NTP is still recommended to deal with the fake
clock "drifting" while the hardware is halted or rebooting.
安装 fake-hwclock 后,您的机器不会在启动时误以为时间又回到了 1970 年。当您的机器启动时,它会将其时钟设置为 fake-hwclock 在上次重启/关机时写入的时间戳。这意味着,如果您在启动时出现网络问题,您可以获得一个相对正确的时钟。