如何在Ubuntu 16.04上设置时间同步

准确的计时已成为现代软件部署的关键组成部分。无论是确保日志以正确的顺序记录或数据库更新都被正确应用,不一致的时间可能会导致错误,数据损坏和其他难以调试...

介绍

准确的计时已成为现代软件部署的关键组成部分。 无论是确保日志以正确的顺序记录或数据库更新都被正确应用,不同步的时间可能会导致错误,数据损坏和其他难以调试的问题。

Ubuntu 16.04具有内置的时间同步,默认情况下使用systemd的timesyncd服务激活。 在本文中,我们将介绍一些基本的时间相关命令,验证timesyncd是否处于活动状态,并了解如何安装备用网络时间服务。

先决条件

在开始本教程之前,您将需要一个具有非root,启用sudo功能的用户的Ubuntu 16.04服务器 ,如本Ubuntu 16.04服务器设置教程所述

在服务器上查找时间的最基本的命令是date 任何用户都可以键入此命令打印日期和时间:

date
Wed Apr 26 17:44:38 UTC 2017

大多数情况下,您的服务器将默认为UTC时区,如以上输出中突出显示的那样。 UTC是协调世界时经度在零度的时间。 当您的基础架构跨越多个时区时,一致地使用Universal Time可以减少混乱。

如果您有不同的要求并需要更改时区,则可以使用timedatectl命令来执行此操作。

首先列出可用的时区:

timedatectl list-timezones

时区列表将打印到您的屏幕。 您可以按SPACE向下翻页, b可向上翻页。 找到正确的时区后,记下它,然后键入q退出列表。

现在使用timedatectl set-timezone ,确保将下面突出显示的部分替换为列表中找到的时区。 您需要使用带有timedatectl sudo进行此更改:

sudo timedatectl set-timezone America/New_York

您可以再次运行date来验证您的更改:

date
Wed Apr 26 13:55:45 EDT 2017

时区缩写应反映新选择的值。

现在我们知道如何检查时钟并设置时区,让我们确保我们的时间正确同步。

使用timedatectl控制timeyncd

直到最近,大多数网络时间同步由网络时间协议守护程序或ntpd处理。 该服务器连接到其他NTP服务器池,为其提供恒定和准确的时间更新。

Ubuntu的默认安装现在使用timesyncd而不是ntpd。 timesyncd连接到同一时间服务器并以大致相同的方式工作,但是更轻便,更加集成了系统级和Ubuntu的低级别工作。

我们可以通过运行没有参数的timedatectl来查询timesyncd的状态。 在这种情况下您不需要使用sudo

timedatectl
Local time: Wed 2017-04-26 17:20:07 UTC
  Universal time: Wed 2017-04-26 17:20:07 UTC
        RTC time: Wed 2017-04-26 17:20:07
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

这将显示本地时间,通用时间(如果您没有从UTC时区切换,可能与本地时间相同)以及某些网络时间状态信息。 Network time on: yes表示timeyncd已启用, NTP synchronized: yes表示时间已成功同步。

如果timeyncd未启用,请使用timedatectl打开它:

sudo timedatectl set-ntp on

再次运行timedatectl以确认网络时间状态。 实际的同步可能需要一分钟才能发生,但是最后两个Network time on: NTP synchronized:NTP synchronized:应该yes

切换到ntpd

虽然timesyncd对于大多数目的来说都是正常的,但是对于即使最轻微的扰动也是非常敏感的应用程序,由于使用更复杂的技术来不断地逐渐保持系统时间的进行,ntpd可能会更好地服务于ntpd。

在安装ntpd之前,我们应该关闭timesyncd:

sudo timedatectl set-ntp no

验证timesyncd是否关闭:

timedatectl

寻找Network time on: no输出。 这意味着timesyncd已经停止。 我们现在可以使用apt-get安装ntp包:

sudo apt-get install ntp

ntpd将在安装后自动启动。 您可以查询ntpd的状态信息,以验证一切正常工作:

sudo ntpq -p
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
0.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
1.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
2.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
3.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
ntp.ubuntu.com  .POOL.          16 p    -   64    0    0.000    0.000   0.000
-makaki.miuku.ne 210.23.25.77     2 u   45   64    3  248.007   -0.489   1.137
-69.10.161.7     144.111.222.81   3 u   43   64    3   90.551    4.316   0.550
+static-ip-85-25 130.149.17.21    2 u   42   64    3   80.044   -2.829   0.900
+zepto.mcl.gg    192.53.103.108   2 u   40   64    3   83.331   -0.385   0.391

ntpq是ntpd的查询工具。 -p标志请求有关ntpd连接到的NTP服务器(或p eers)的信息。 您的输出将略有不同,但应列出默认的Ubuntu池服务器加上其他几个。 请记住,ntpd可能需要几分钟才能建立连接。

结论

在本文中,我们展示了如何查看系统时间,更改时区,使用Ubuntu的默认timesyncd并安装ntpd。 如果您具有比我们所涵盖的更复杂的计时需求,则可以参考官方的NTP文档 ,还可以查看NTP Pool Project ,这是一个全球志愿者团队,提供世界上大部分的NTP基础架构。