最近调试时发现远程嵌入式设备的时间和本地时间不对,远程设备也不方便安装ntpdate等命令,甚至可能无法连接网络,所以无法通过ntp服务器来进行对时,因此有了如下思路。
1. 获取本地设备时间
本地时间可通过如下命令获取:
date '+%Y%m%d %H:%M:%S'
输出如下:
20240105 14:51:27
2. 设置远程设备时间
远程设备时间也可在SSH登入后通过date
命令来设置:
date -s "20240105 14:51:27"
注意时间字符串需用引号包裹。
输出如下:
Fri Jan 5 14:51:27 CST 2024
3. 将远程设备时间写入RTC时钟
时间设置完成后应通过hwclock
命令写入RTC硬件时钟,防止重启后时间错误:
hwclock -w
该命令无输出。
4. 上述流程如果分开操作那么一定会存在较大的时间差,因此应将其合并到一条命令,在获取本地时间后直接通过SSH的远程执行命令功能来设置远程时间。这里我们使用|
管道操作来将本地生成的命令传入SSH远程执行:
echo "date -s \"`date '+%Y%m%d %H:%M:%S'`\" && hwclock -w" | ssh root@192.168.1.10
输出如下:
Fri Jan 5 14:51:27 CST 2024
如此便实现了一条命令同步本地时间到远程设备,精度仅受本地到远程设备的网络延迟影响。
Windows下也可以使用
powershell
来实现类似操作,命令如下:echo ("date -s "+'"'+(Get-Date -Format 'yyyyMMdd HH:mm:ss')+'"') | ssh root@192.168.51.98
Windows的字符串操作还是相对麻烦一点。
近期评论