如何在Ubuntu18.04上设置时间同步

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

Ubuntu 18.04 内置了时间同步功能,默认使用 systemd 的 timesyncd 服务激活。 在本文中,我们将了解一些与时间相关的基本命令,验证 timesyncd 是否处于活动状态,并学习如何安装备用网络时间服务。

先决条件

在开始本教程之前,您需要一个 Ubuntu 18.04 服务器和一个非 root、启用 sudo 的用户,如 this Ubuntu 18.04 server setup tutorial 中所述。

导航基本时间命令

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

date
OutputTue Jul 10 14:48:52 UTC 2018

大多数情况下,您的服务器将默认为 UTC 时区,如上面的输出中突出显示的那样。 UTC 是 协调世界时 ,即零度经度的时间。 当您的基础设施跨越多个时区时,始终使用世界时可以减少混乱。

如果您有不同的要求,需要更改时区,可以使用 timedatectl 命令进行。

首先,列出可用的时区:

timedatectl list-timezones

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

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

sudo timedatectl set-timezone America/New_York

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

date
OutputTue Jul 10 10:50:53 EDT 2018

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

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

使用 timedatectl 控制 timesyncd

直到最近,大多数网络时间同步都是由 网络时间协议守护进程 或 ntpd 处理的。 此服务连接到其他 NTP 服务器池,为它提供持续且准确的时间更新。

Ubuntu 的默认安装现在使用 timesyncd 而不是 ntpd。 timesyncd 连接到相同的时间服务器并以大致相同的方式工作,但更轻量级并且与 systemd 和 Ubuntu 的低级工作更集成。

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

timedatectl
Output                      Local time: Tue 2018-07-10 10:54:12 EDT
                  Universal time: Tue 2018-07-10 14:54:12 UTC
                        RTC time: Tue 2018-07-10 14:54:12
                       Time zone: America/New_York (EDT, -0400)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

这会打印出本地时间、世界时间(如果您没有从 UTC 时区切换,可能与本地时间相同)和一些网络时间状态信息。 System clock synchronized: yes表示时间同步成功,systemd-timesyncd.service active: yes表示timesyncd开启并运行。

如果 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

在输出中查找 systemd-timesyncd.service active: no。 这意味着 timesyncd 已停止。 我们现在可以使用 apt 安装 ntp 包:

sudo apt update
sudo apt install ntp

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

ntpq -p
Output     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
+ec2-52-0-56-137 216.239.35.0     2 u   16   64    1    7.872   -2.137   1.485
+66.220.10.2     129.6.15.30      2 u   12   64    1   65.204    3.740   2.686
+block.steinhoff 209.51.161.238   2 u   11   64    1   33.364    1.710   3.586
+eterna.binary.n 216.229.0.50     3 u   11   64    1   35.330    2.821   2.839
+2604:a880:800:1 209.51.161.238   2 u   14   64    1    0.394    0.386   2.462
+ec2-52-6-160-3. 130.207.244.240  2 u   11   64    1    8.150    2.050   3.053
+mx.danb.email   127.67.113.92    2 u   13   64    1   63.868    1.539   2.240
*hydrogen.consta 129.6.15.28      2 u   12   64    1    2.989    1.755   2.563
+ntp-3.jonlight. 127.67.113.92    2 u   10   64    1   64.561    2.122   3.593
+undef.us        45.33.84.208     3 u   12   64    1   33.508    1.631   3.647
+ntp-3.jonlight. 127.67.113.92    2 u    8   64    1   64.253    2.645   3.174
 2001:67c:1560:8 145.238.203.14   2 u   22   64    1   71.155   -1.059   0.000
+test.diarizer.c 216.239.35.4     2 u   11   64    1   64.378    4.648   3.244
 2001:67c:1560:8 145.238.203.14   2 u   18   64    1   70.744   -0.964   0.000
 alphyn.canonica 132.246.11.231   2 u   17   64    1    7.973   -0.170   0.000
+vps5.ctyme.com  216.218.254.202  2 u   10   64    1   65.874    1.902   2.608

ntpq是ntpd的查询工具。 -p 标志询问有关 ntpd 已连接到的 NTP 服务器(或 peers)的信息。 您的输出会略有不同,但应该列出默认的 Ubuntu 池服务器以及其他一些服务器。 请记住,ntpd 建立连接可能需要几分钟时间。

结论

在本文中,我们展示了如何查看系统时间、更改时区、使用 Ubuntu 的默认 timesyncd 以及安装 ntpd。 如果您有比我们在这里介绍的更复杂的计时需求,您可以参考 官方 NTP 文档 ,还可以查看 NTP 池项目 ,这是一个全球性的组织提供世界上大部分 NTP 基础设施的志愿者。