如何在 Ubuntu 16.04 上设置时间同步
介绍
准确计时已成为现代软件部署的重要组成部分。无论是确保日志以正确的顺序记录还是正确应用数据库更新,不同步的时间都可能导致错误、数据损坏和其他难以调试的问题。
Ubuntu 16.04 使用 systemd 的 timesyncd 服务内置并默认激活时间同步。在本文中,我们将查看一些与时间相关的基本命令,验证 timesyncd 是否处于活动状态,并学习如何安装备用网络时间服务。
先决条件
在开始本教程之前,您将需要一个 Ubuntu 16.04 服务器,该服务器具有非 root、启用 sudo 的用户,如本 Ubuntu 16.04 服务器设置教程中所述。
导航基本时间命令
查找服务器时间的最基本命令是 date
。任何用户都可以键入此命令来打印日期和时间:
- date
OutputWed Apr 26 17:44:38 UTC 2017
大多数情况下,您的服务器将默认为 UTC 时区,如以上输出中突出显示的那样。 UTC 是协调世界时,即零经度的时间。当您的基础架构跨越多个时区时,始终使用世界时可以减少混乱。
如果您有不同的要求并且需要更改时区,您可以使用 timedatectl
命令来执行此操作。
首先,列出可用的时区:
- timedatectl list-timezones
时区列表将打印到您的屏幕上。您可以按 SPACE
向下翻页,按 b
向上翻页。找到正确的时区后,记下它,然后键入 q
退出列表。
现在使用 timedatectl set-timezone
设置时区,确保将下面突出显示的部分替换为您在列表中找到的时区。您需要使用 sudo
和 timedatectl
来进行此更改:
- sudo timedatectl set-timezone America/New_York
您可以通过再次运行 date
来验证您的更改:
- date
OutputWed Apr 26 13:55:45 EDT 2017
时区缩写应反映新选择的值。
现在我们知道如何检查时钟和设置时区,让我们确保我们的时间正确同步。
使用 timedatectl 控制时间同步
直到最近,大多数网络时间同步都是由网络时间协议守护程序 或 ntpd 处理的。该服务器连接到其他 NTP 服务器池,这些服务器为其提供持续且准确的时间更新。
Ubuntu 的默认安装现在使用 timesyncd 而不是 ntpd。 timesyncd 连接到相同的时间服务器并以大致相同的方式工作,但更轻量级并且与 systemd 和 Ubuntu 的低级工作更加集成。
我们可以通过不带参数运行 timedatectl
来查询 timesyncd 的状态。在这种情况下,您不需要使用 sudo
:
- timedatectl
OutputLocal 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
表示开启timesyncd,NTP synchronized: yes
表示时间同步成功。
如果未启用 timesyncd,请使用 timedatectl 将其打开:
- sudo timedatectl set-ntp on
再次运行 timedatectl
以确认网络时间状态。实际同步可能需要一分钟时间,但最终 Network time on:
和 NTP synchronized:
都应该显示为 yes
。
切换到 ntpd
虽然 timesyncd 对于大多数用途来说都很好,但 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
Outputremote 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 服务器(或对等点)的信息。您的输出会略有不同,但应该会列出默认的 Ubuntu 池服务器以及一些其他服务器。请记住,ntpd 可能需要几分钟才能建立连接。
结论
在本文中,我们展示了如何查看系统时间、更改时区、使用 Ubuntu 的默认 timesyncd 以及安装 ntpd。如果您有比我们在此介绍的更复杂的计时需求,您可以参考 NTP 池项目,这是一个全球志愿者组织,提供世界上大部分的 NTP 基础设施。