> Linux教程 > Linux学习 >

Linux date & ntp 小实验

测试东西的时候发现服务器上的时间快了几十秒,尝试用 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 进行下面的:

  1. 关掉系统的同步自动时间同步

  2. 改了一下 /etc/ntp.conf 文件的配置,只简单加了几个 server 地址

  3. sudo ntpd -d 这样居然就可以开始了,同时还可以 ntpq -p 查看些信息

  4. 再用 Wireshark 抓 UDP 的包,抓到了 NTP 的内容,如下图

可以看到这个 NTP 协议两端都是用 123 端口通信的,所以有防火墙的环境才比较容易失败吧。

暂且这样,之后再说。

参考

扩展

  • 设置 Linux 的时区

(责任编辑:IT)