我正在嵌入式平台上运行繁忙的盒子。我想每次重新启动硬件时都正确设置盒子上的日期。我没有办法持久地节省时间,所以只能每次都设定时间。我有 LAN 连接,但没有 SSH。我目前的做法是将“日期”的输出重定向到我的 PC 上的一个文件,通过 tftp 从我的硬件平台访问该文件,然后以某种方式解析该文件,使用其内容,然后设置日期。我不知道如何从文件中获取字符串,然后使用“date”命令设置它。任何帮助,将不胜感激。任何其他设置日期的方法都可以。我尝试过使用 ntpd,但由于缺乏互联网连接而失败
答案1
答案2
要在嵌入式机器上使用网络时间协议,只需运行一些轻量级的NTP守护进程(服务器)位于 LAN 本地 - 例如,在您当前尝试用于同步的计算机上。大多数(如果不是全部)发行版都有类似的软件包打开ntpd或者网络传输协议提供 NTP 服务器。
如果您仍然坚持解析 的输出date
,最好的方法是对输出和输入使用通用+%s
(自 1970 年以来的秒数)格式。为此,请在日期来源side 用于date +%s
获取日期字符串,并在 busybox 机器上运行date -s "@$VALUE"
,其中$VALUE
应替换为从源接收的值。请注意,由于通信和命令执行时间(当您使用 NTP 时,这两者都会被最小化),这种方法最终必然会导致结果出现偏差。
答案3
使用 cron 作业,您可以将文件写入 /tftp 目录,粒度为 1 分钟。
* * * * * date "+%m%d%H%M%Y.%S" > /tftp/currdate.txt 2>/dev/null
该文件的内容是单个值,其格式与 date 命令设置日期/时间所需的格式相同。
bash$ cat currdate.txt
102600052011.00
在 busybox 方面,您只需 tftpget 文件并处理它
cat currdate.txt | while read date; do
date $date
done
如果 HTTP 是一个选项,您可以设置一个 php 脚本,在调用时仅返回日期,并让您的脚本在 busybox 端轮询该 URL,并处理结果。在这种情况下,日期的粒度会更接近。
使用 TFTP,您将在 1 分钟内完成。希望这足够接近。
答案4
根据你的评论。
感谢您的回答。 rdate 在我的平台上不可用。我也无法使用 ntp,因为我无法在板上访问互联网。我更感兴趣的是一种能够解析另一台机器的日期输出并目前在此处设置的方法
问题的解决方案是在 LAN 上设置另一台计算机作为时间服务器-- 该机器应该(最好但不是严格必须)能够访问互联网,以便它本身可以与外部时间源同步。 NTP 服务器可以配置为在 LAN 上广播时钟(每 5 分钟左右 1 个 UDP 数据包),或者它也可以只是根据请求访问的服务器 - 您的选择。
你的忙箱可以通过 LAN 访问(但不能访问 Internet)来安装NTP客户端它从广播中获取时间,或者在需要时向您的 LAN 服务器询问时间。