测试东西的时候发现服务器上的时间快了几十秒,尝试用 ntp 直接更新一下,结果没有成功,所以还是从头来过,先弄一下简单的理理。
思路
在 Linux 里面获取当前时间
在 Linux 里面手动设置时间
NTP 是啥?
如何用 NTP 来同步自己的时间
Linux 中的时间
date
在树莓派中来运行,首先是当前时间
$ date
Tue Mar 8 10:05:13 UTC 2016
此时的北京时间刚好是 18:05
,毕竟我们是 +8
时区,上面显示的是 UTC 时间。
Mac 里面的如下,是 CST 时间
$ date
Tue Mar 8 18:07:04 CST 2016
除了显示时间,date
还能够把字符串中的时间按照指定的格式显示,以及设置时间。
其他的有关时间的获取
除了标准时间能不能获取时间戳?
怎么获取时区?
时间戳
$ date +%s
1457432423
时区
$ date +%Z
CST
原来 CST 是北京时间(China Standard Time)的意思,UTC 就是协调世界时。
设置时间
设置时间很简单,只要 -s, --set=STRING
,当然是需要管理员权限的。
后面的 STRING
比较自由。有用下面的格式:
$ sudo date -s '2016-03-08 11:58:04'
Tue Mar 8 11:58:04 UTC 2016
$ sudo date -s 'Tue Mar 8 11:55:03 UTC 2016'
Tue Mar 8 11:55:03 UTC 2016
$ sudo date -s '2016-03-08'
Tue Mar 8 00:00:00 UTC 2016
似乎还有更灵活的设置方式,不过还是用那种最朴实的吧。
附上一个显示时间的:
$ date +'%Y-%m-%d %H:%M:%S'
2016-03-08 12:01:41
NTP
这块有点麻烦,主要看了鸟哥的 NTP 時間伺服器之后又做了些实验大概知道怎么回事了。
简单的设置时间
一般的给一个机器设置时间只要 ntpdate
命令就好了,另外的情况可能是需要自己搭 NTP 服务器来使一块机房的机器时间保持同步的时候才会使用吧,而且那个时间好像很慢的样子,现在先只简单的设置下时间就好,所以那些先不予考虑。
$ sudo ntpdate <server>
在这里找到了国内的 NTP Server:pool.ntp.org: NTP Servers in China, cn.pool.ntp.org
取一个拿来用 0.asia.pool.ntp.org
,这个域名对应的 IP 地址是不停变动的,为了实现更好的同步吧。
sudo ntpdate 0.asia.pool.ntp.org
这个命令执行完之后会直接把时间改掉。似乎那种 ntpd 的方式会渐进的调整时间,且会一直去同步时间,服务器上应该需要启动这个吧。
上面的命令在旁边的树莓派上是可用的,但是在远程的服务器上总是失败,错误如下:
$ sudo ntpdate 202.118.1.46
8 Mar 20:49:47 ntpdate[10113]: no server suitable for synchronization found
感觉是端口被封了,NTP 使用的是 123 Port。
用 ntp 来同步时间
在 $ sudo service ntp start
过后,就可以 ntpq -pn
来看状态,下面的结果说明端口被封了吧,reach 全都是 0。
$ ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
123.108.200.124 .INIT. 16 u - 64 0 0.000 0.000 0.000
129.250.35.250 .INIT. 16 u - 64 0 0.000 0.000 0.000
212.26.18.41 .INIT. 16 u - 64 0 0.000 0.000 0.000
202.71.140.36 .INIT. 16 u - 64 0 0.000 0.000 0.000
91.189.89.199 .INIT. 16 u - 64 0 0.000 0.000 0.000
TroubleshootingNTP < Support < NTP
用 Mac 来 debug
好在 Mac 上也有 ntpd,参照:Setup an NTP Server in Mac OS X 10.8 – Philipp Klaus's Computing Blog进行下面的:
关掉系统的同步自动时间同步
改了一下
/etc/ntp.conf
文件的配置,只简单加了几个 server 地址sudo ntpd -d
这样居然就可以开始了,同时还可以ntpq -p
查看些信息再用 Wireshark 抓 UDP 的包,抓到了 NTP 的内容,如下图
可以看到这个 NTP 协议两端都是用 123 端口通信的,所以有防火墙的环境才比较容易失败吧。
暂且这样,之后再说。
参考
这里这篇关于时间的解决思路很多,很被坑的感觉 树莓派启动那些事(三) - elmagnifico's blog
扩展
设置 Linux 的时区
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。