IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Linux date & ntp 小实验

    常伟佳发表于 2016-03-08 21:50:14
    love 0

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

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

    暂且这样,之后再说。

    参考

    • Time Synchronisation with NTP

    • 这里这篇关于时间的解决思路很多,很被坑的感觉 树莓派启动那些事(三) - elmagnifico's blog

    扩展

    • 设置 Linux 的时区



沪ICP备19023445号-2号
友情链接