树莓派的时间校对在早期板子上是个问题。树莓派上并没有备用电源,断电一段时间后很容易出现时间不准,使用ntpdate速度很慢,也经常连不上,最近找到个项目htpdate,能够通过读取HTTP协议头中的服务器时间来调整自己系统的时间,感觉很有意思,就放到树莓派上用了,效果不错,对于一般使用完全足够了:

htpdate的安装使用

首先把htpdate下载下来 项目的github

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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秒左右的误差,但对于我来说关系并不大。htpdate 使用上也很简单,简单编译安装之后root运行下面一句话(不加 -t 参数基本不能同步成功):

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

我一般习惯让树莓派在启动的时候自动执行上面这句话,所以就把这就话加到了/etc/rc.local里面。这样每次启动(这个时候很可能时间是错的)都会自动进行一次时间校对。

使用tzselect修改时区

除了时间容易错外,另外有可能会出错的是树莓派的时区,这往往是配置上的问题,使用tzselect可以对时区进行修正,在shell中输入:

1
tzselect

根据他的提示完成配置。之后会提示这样一段:

1
2
3
4
5
6
7
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

意思是需要配置下环境变量才能永久使用该时区,所以我们就修改一下/etc/profile文件,添加上TZ=’Asia/Shanghai’; export TZ就可以了。或者执行下面一句:

1
sudo su -c "echo export TZ=Asia/Shanghai >> /etc/profile"