让Linux下位机跟Windows上位机自动时间同步

需求来源

嵌入式系统通常分上位机下位机,如果二者的日志时间戳 能一致,则对定位问题价值巨大。另外有些原型系统的RTC时钟没装电池,更需要从外部获取真实时间,否则每次开机都是1970年1月1号
如果能够让下位机每次开机都跟上位机对一次时,即同步一下时间,则可满足上述需求,那么怎么对时呢?

解决方案:NTP

NTP又叫网络时间协议,是一种用于时间同步的网络协议。

配置Windows为NTP服务器

Linux和Windows都有NTP客户端,但是Windows作为上位机,还必须得具备NTP服务器的能力,幸好,
win7以后的系统已经自带NTP server模块了,用户只需要打开即可,打开的方法见这篇文章

配置Linux为NTP客户端

Linux本身已经自带NTP客户端ntpdate了,我们要做的是让它开机自动对时,于是在/root/.bashrc里加一行即可

ntpdate 192.168.20.103 #上位机的IP

注意,本文假设你的下位机是默认root账户登录,若是普通账户则需要sudo来提升权限,以及expect脚本来实现自动输入密码!

注意2,为了正确显示时间,还要确保时区配置正确,这里只要设置TZ环境变量即可,在/root/.bashrcntpdate语句前加一行:

TZ='Asia/Shanghai'; export TZ

就能正确显示时区了!

ps.如果你想用别的时区,可以运行tzselect这个交互式命令查询你想要的时区,它会给出对应的TZ环境变量值。
pps.设置时区前系统的时间是UTC时间,设置后是CST时间,这里是二者的区别

root@linaro-ubuntu-desktop:~# date
Mon Aug 16 18:20:53 UTC 2021
root@linaro-ubuntu-desktop:~# TZ='Asia/Shanghai'; export TZ
root@linaro-ubuntu-desktop:~# date
Tue Aug 17 02:22:09 CST 2021

让NTP服务随Windows开机启动

之前开启的NTP服务属于手工启动,Windows重启后就停了,这时Linux客户端会报错:找不到服务器
NTP客户端找不到NTP服务器
所以需要让NTP服务开机启动,做法是:计算机管理->服务和应用程序->服务,找到Windows Time服务,双击打开属性对话框,点开启动类型下拉框,将手动改为自动,最后点确定退出。
让NTP服务开机启动

使用效果

配置后第一次重启

Connecting to 192.168.20.161:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Welcome to Linaro 12.11 (GNU/Linux 4.6.0 uImageV0.2 -svn316 armv7l)

 * Documentation:  https://wiki.linaro.org/
Last login: Thu Jan  1 00:00:07 1970
19 Jul 08:26:23 ntpdate[1692]: step time server 192.168.20.103 offset 1626683154.275740 sec

前后对比

绿线以上为对时前

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值