我查看了文档,但找不到类似的东西。情况是,我有一台 BeagleBone Black,它没有真正的时钟。默认情况下,计算机启动时会认为现在是 1999 年(这对于聚会来说很棒,但是……)。NTP 解决了这个问题,但前提是网络连接良好。否则,它又回到了 1999 年。不幸的是,我需要将设备放在无法访问互联网的地方,还需要记录至少一些感觉。
我突然想到,如果有一种方法可以让 NTP 在网络不可用时从文件中读取时间,那么就没问题了。我设想时间文件将被写入 cron 作业或 NTP 本身中维护此文件状态的某个东西。
NTP 有类似的东西吗?有没有其他工具可以满足我的需求?特别是在 BBB 上设置起来不会太麻烦?
答案1
您需要该fake-hwclock
软件包。它是专门为这种情况设计的。Debian 软件包页面的描述:
fake-hwclock:在没有 RTC 硬件的机器上保存/恢复系统时钟
有些机器没有可运行的实时时钟 (RTC) 单元,或者没有现有硬件的驱动程序。fake-hwclock 是一组简单的脚本,用于定期(包括关机时)保存内核的当前时钟并在启动时恢复它,以便系统时钟至少接近实时。这将阻止一些可能由系统认为它已经回到 1970 年而引起的问题,例如需要在每次启动时执行文件系统检查。
除此之外,仍然建议使用 NTP 来处理硬件停止或重启时出现的假时钟“漂移”。
答案2
你可以创建一个每隔几分钟运行一次的 cronjob,如下所示:
date +%s > /root/lasttime
然后有另一个 cronjob(假设你有一个可以理解高级时间设置的 cron,否则在启动脚本中):
@reboot date +%s -s `cat /root/lasttime`
第一个将自纪元以来的时间(以秒为单位)存储到中/root/lasttime
,然后重新启动从文件中读取时间并设置日期。
因此,您的时间会因 Beagle 关闭的时间长短而出现错误。您可能遇到竞争条件,即第一个 cron 作业可能在第二个作业之前执行,因此请将时间设置为 1999 年,因此最好将其设置为不频繁,或者在存储之前进行检查以确保时间合理。