Raspberry Pi开发之旅-同步时间

使用htpdate同步时间

由于树莓派板子上没有 RTC 硬件和电池,因此树莓派上的系统时间重启是保存不了的。网上已经有人想到应对 NTP 被防火墙封掉类似的需求了,开源的 htpdate 命令直接使用 HTTP 协议来进行系统时间同步,项目主页在这里:

https://github.com/iridium77/htpdate

htpdate 的原理也非常简单,直接解析 HTTP 协议头中的服务器时间信息,然后设置本地时间,我们来看百度返回的 HTTP 头:

HTTP/1.1 200 OK

Date Mon, 13 Oct 2014 16:05:18 GMT

Content-Type text/html

Transfer-Encoding chunked

Connection Keep-Alive

Cache-Control private

Expires Mon, 13 Oct 2014 16:05:18 GMT

Server BWS/1.1

BDPAGETYPE 2

BDQID 0x8b40c1f700000bd4

BDUSERID 13923551

Set-Cookie BDSVRTM=133; path=/

Set-Cookie BD_HOME=1; path=/

上面的 Date Mon, 13 Oct 2014 16:05:18 GMT 就是百度的 Web 服务器上的系统时间了。

htpdate 命令做时间同步会有 0.5 秒左右的误差(看看 HTTP 头就知道里面很多时间都是以秒为单位哈),对于我的树莓派来说就完全没有关系,如果对这个比较在意的话只能尽量用 NTP 时间同步了。

htpdate 使用上也很简单,简单编译安装之后把这条命令加到 Raspberry Pi Raspbian 系统的 /etc/rc.local 文件中(不加 -t 参数基本不能同步成功哦):

htpdate -t -s ntp.neu.edu.cn

然后重启树莓派就可以正常同步系统时间了。

使用局域网NTP服务器同步时间

1、配置局域网NTP服务器

下载地址:https://www.meinbergglobal.com/english/sw/ntp.htm
按默认步骤安装即可。

2、修改配置文件ntp.conf

配置文件默认路径为:C:\Program Files (x86)\NTP\etc\ntp.conf
去掉

  1. #server 127.127.1.0
  2. #fudge 127.127.1.0 stratum 12

前的#
保存

笔者改完后的配置文件内容如下

  1. # NTP Network Time Protocol
  2. # **** ATTENTION ****: *You have to restart the NTP service when you change this file to activate the changes*
  3. # PLEASE CHECK THIS FILE CAREFULLY AND MODIFY IT IF REQUIRED
  4. # Configuration File created by Windows Binary Distribution Installer Rev.: 1.27  mbg
  5. # please check http://www.ntp.org for additional documentation and background information
  6. # restrict access to avoid abuse of NTP for traffic amplification attacks
  7. # see http://news.meinberg.de/244 for details
  8. restrict default noquery nopeer nomodify notrap
  9. restrict -6 default noquery nopeer nomodify notrap
  10. # allow status queries and everything else from localhost
  11. restrict 127.0.0.1
  12. restrict -6 ::1
  13. # if you need to allow access from a remote host, you can add lines like this:
  14. # restrict <IP OF REMOTE HOST>
  15. # Use drift file
  16. driftfile "D:\Program Files (x86)\NTP\etc\ntp.drift"
  17. # your local system clock, could be used as a backup
  18. # (this is only useful if you need to distribute time no matter how good or bad it is)
  19. server 127.127.1.0
  20. # but it should operate at a high stratum level to let the clients know and force them to
  21. # use any other timesource they may have.
  22. fudge 127.127.1.0 stratum 12
  23. # Use a NTP server from the ntp pool project (see http://www.pool.ntp.org)
  24. # Please note that you need at least four different servers to be at least protected against
  25. # one falseticker. If you only rely on internet time, it is highly recommended to add
  26. # additional servers here.
  27. # The ‘iburst‘ keyword speeds up initial synchronization, please check the documentation for more details!
  28. server 0.asia.pool.ntp.org iburst minpoll 6 maxpoll 7
  29. server 1.asia.pool.ntp.org iburst minpoll 6 maxpoll 7
  30. server 2.asia.pool.ntp.org iburst minpoll 6 maxpoll 7
  31. server 0.us.pool.ntp.org iburst minpoll 6 maxpoll 7
  32. server 1.us.pool.ntp.org iburst minpoll 6 maxpoll 7
  33. server 2.us.pool.ntp.org iburst minpoll 6 maxpoll 7
  34. # End of generated ntp.conf --- Please edit this to suite your needs

3、重启服务

计算机--右键 管理--服务与应用程序--服务,找到Network Time Protocol Daemon,右键重启
或者通过开始菜单重启。两者作用一样
开始--Meinberg--Network Time Protocol--Service Control--Restart NTP Service

4、本地测试

命令行输入
ntpq -p
结果中的第一行如果出现LOCAL,说明NTP服务器进程存在

  1. Microsoft Windows [版本 6.3.9600]
  2. (c) 2013 Microsoft Corporation。保留所有权利。
  3. C:\Windows\system32>ntpq -p
  4. remote           refid      st t when poll reach   delay   offset  jitter
  5. ==============================================================================
  6. LOCAL(0)        .LOCL.          12 l  201   64   10    0.000    0.000   0.000
  7. +ntp2.aliyun.com 10.137.38.86     2 u   61   64    7   55.655    1.918   7.038
  8. *118.189.211.186 .PPS.            1 u   62   64    7  117.009   10.206   3.703
  9. +shim.active-app 218.186.3.36     2 u  124   64    2  105.239   -4.597   2.797
  10. -104.156.99.226  192.12.19.20     2 u   61   64    5  256.067   -2.231   7.130
  11. -y.ns.gin.ntt.ne 249.224.99.213   2 u   10   64    5  138.076   11.235   8.025
  12. C:\Windows\system32>

5、添加防火墙例外

将ntp.exe添加到防火墙例外或者将UDP的123端口添加到防火墙例外

6、再次重启服务器

7、配置树莓派同步时间

首先熟悉几个关于时间命令

  1. date #查看当前时间
  2. date -s "2016-03-31 10:18:00" #设置当前时间为2016年3月31日10:18:00
  3. date -s 2016-03-31 #设置当前日期为2016年3月31日0:00:00
  4. date -s 10:18:00 #设置当前时间为10:18:00

8、安装ntpdate

sudo apt-get install ntpdate

9、对时

sudo ntpdate 172.26.69.87

其中172.26.69.87为局域网NTP服务器的IP地址
对时后可用date命令查看时间

tip1:如果遇到the NTP socket is in use, exiting的提示,这是因为ntpd也是用的UDP123端口更新时间,我们先将ntp这个服务关掉

sudo service ntp stop

然后再执行

sudo ntpdate 172.26.69.87

tip2:如果遇到no server suitable for synchronization found的提示,多半是因为网络不通或者对应的NTP服务器没有启动。

10、修改时区

默认情况下树莓派使用的是UTC时间,与北京时间相差8小时,所以需要修改时区
tzselect命令并不能真正的修改
正确的做法是替换掉时区文件

sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改之后用date查看到的是CST时间

11、添加局域网NTP服务器地址

修改配置文件ntp.conf

sudo nano /etc/ntp.conf

在server项目前面添加如下内容

  1. server 172.26.69.87 prefer
  2. server 192.168.42.254 iburst
  3. server cn.pool.ntp.org iburst
  4. server asia.pool.ntp.org iburst
  5. server pool.ntp.org iburst

这个配置文件用于ntpd程序同步时间,每次树莓派开机启动后都会启动这个程序,同步的时间需要5分钟。

12、查看时间

date

13、配置开机自启

在实际运行中,如果计算机的时间与网络时间相差超过30分钟,那么ntpd就不会自动同步了,笔者处于每天断电7~8个小时的校园网,所以每次开机必须先用ntpdate强制同步时间,但这个进程不能执行得太早,太早的话可能还没联网。所以加了个延迟40秒启动。

编辑

sudo nano /usr/bin/synctime

内容

  1. #! /bin/sh
  2. #延迟40秒启动
  3. sleep 40s
  4. #停止ntpd服务
  5. killall ntpd
  6. #对时
  7. ntpdate -u 202.199.131.1
  8. #开启ntpd服务器
  9. ntpd -c /etc/ntp.conf

保存
修改脚本执行权限

sudo chmod a+x /usr/bin/synctime

加入开机启动

sudo nano /etc/rc.local

#在exit 0前面添加

sudo /usr/bin/synctime > /dev/null 2>&1

保存
修改执行权限

sudo chmod +x /etc/rc.local

重启

reboot

附:

DJTU内网推荐NTP配置

  1. server 222.26.224.216 prefer
  2. server 202.199.131.1 iburst
  3. server 202.120.2.100 iburst
  4. server cn.pool.ntp.org iburst
时间: 2024-10-25 22:04:40

Raspberry Pi开发之旅-同步时间的相关文章

Raspberry Pi开发之旅-发送邮件记录时间及IP

由于我使用树莓派的场景大多数是在没有显示器.只用terminal连接它的情况下,所以,它的IP地址有时会在重启之后变掉(DHCP的),导致我无法通过terminal连接上它.然后我又要很麻烦地登录路由器的管理界面里,去看它被分配到的新IP是什么,然后用terminal重连,太麻烦了,不是么?作为一个树莓派玩家,这种麻烦简直是无法接受的! 为了解决这个问题,我让Pi开机的时候,自动向我指定的Email发送一封邮件,告诉我它此次开机时的IP地址. 步骤: 开机时执行一个脚本,检测网络可用性→网络通畅

Raspberry Pi开发之旅-实现云平台监控

一.基本设置 1 sudo raspi-config 移动到第五项"Enable Camera",回车进入,按tab键切换到"Enable"回车确认.回到主菜单,tab键切换到"Finish"回车确认.树莓派会自动重启. 或者执行命令手动关机 1 sudo shutdown -h now 警告!!!!!!!!!!!!!!!!!!!!!!!!!绝对不可以带着电源的情况下插入摄像头,如果带电操作,十之八九你的摄像头会GG,博主血泪教训.而且摄像头GG

Raspberry Pi开发之旅-WIFI遥控小车

一.简单介绍树莓派的GPIO口 上图是树莓派2代的接口(不同型号接口会有差异),我们就以此为例来说下这些接口. 1.GPIO介绍 GPIO 英文全称是:General-purpose input/output 通用型之输入输出的简称,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO).通过这些GPIO口,我们可以控制很多第三方的寄存器设备,简单来说我们可以通过这些I/O口控制一些芯片的电路.读取传感器的数值等. 2.所需材

Raspberry Pi开发之旅-土壤湿度检测

一.土壤传感器 传感器四个针脚:  针脚 含义 AO 模拟信号输出 DO 数字信号输出 GND 电源负极 VCC 电源正极 二.接线 YL-38和YL69 之间直接用2根母对母线连接. YL-38和树莓派之间VCC接1号针脚,GND接6号针脚,DO接11号针脚. 我们把VCC接到树莓派的DC3.3v输出上,我用的是PIN 01,GND接在任何一个接地端口上,我用的是PIN 06,DO输出接任何一个空闲的GPIO端口,我用的是11.如果不清楚树莓派端口布局的朋友可以参考这张图: 电源连通之后,电源

Raspberry Pi开发之旅-空气温湿度检测(DHT11)

一.首先,简单介绍下DHT11: DHT11是一个温湿度传感器,分为3个接口,分别为:VCC, DATA, GND  引脚号 名称 类型 说明 1 VCC 电源 +级,输入3V-5.5V 2 DATA 数据输出 输出引脚 3 GND 接地 接地引脚 之前看网上说,需要在DHT11VCC和DATA之间加一个电阻,经试验完全不需要. 二.引脚连接: 1.VCC接上3V,可以选择1口或者17口 2.DATA接上GPIO口,我选的是GPIO4,第7口 3.GND接上接地口,我选的是第14口 三.Pyth

Raspberry Pi开发之旅-远程监控

1.安装辅助工具 1 2 sudo apt-get install libjpeg8-dev sudo apt-get install cmake 2.编辑源文件 1 2 sudo git clone <a href="https://github.com/jacksonliam/mjpg-streamer" target="_blank">https://github.com/jacksonliam/mjpg-streamer<br><

Hello Raspberry Pi

Raspberry Pi 入手好一段时间了,原意是想撸 linux,但是后来一整年都在忙孩子房子户口本子的事,这玩意也就搁了一年尘. 最近终于被生活折腾到了尾声,开始找一些东西来折腾折腾. 一.什么是  Rsapbbery Pi Raspberry Pi 是一款信用卡大小,基于 Linux 的卡片电脑,700MHz CPU,B Pi 升级为 512(A Pi 256 内存).UK pi 定价 B Pi 35 刀(A Pi 25 刀),天朝版 B Pi 约 300 软妹B. Raspberry P

基于树莓派(Raspberry Pi)平台的MQ-2烟雾报警系统以及结合Zabbix监控的实现(一)

一.前期准备 达成目标:   利用Rapberry Pi 驱动MQ-2烟雾报警模块,对信息进行采集和提取,而后Zabbix监控系统来收集和处理信息采集到的信息.  1.准备树莓派(Raspberry Pi)一个 2.MQ-2有害气体检测模块 3.杜邦线若干 4.SD卡一张以及一个读卡器 二.各个器件介绍 1.树莓派(Raspberry Pi) ??Raspberry Pi是一个英国小型组织慈善组织The Raspberry Pi Foundation发行的一款针对电脑业余爱好者,学生,以及小型企

Raspberry Pi 4B C和Python开发环境安装

C编译环境wiringPi安装 安装步骤参照 wiringPi官网 目前针对Raspberry Pi 4B的版本是2.5.2 cd /tmp wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb 检查版本 gpio -v Python环境安装 sudo apt-get update sudo apt-get install idle-python2.7 原文地址