介绍
准确的计时已成为现代软件部署的关键组成部分。 无论是确保日志以正确的顺序记录或数据库更新都被正确应用,不同步的时间可能会导致错误,数据损坏和其他难以调试的问题。
Ubuntu 16.04具有内置的时间同步,默认情况下使用systemd的timesyncd服务激活。 在本文中,我们将介绍一些基本的时间相关命令,验证timesyncd是否处于活动状态,并了解如何安装备用网络时间服务。
先决条件
在开始本教程之前,您将需要一个具有非root,启用sudo功能的用户的Ubuntu 16.04服务器 ,如本Ubuntu 16.04服务器设置教程中所述 。
浏览基本时间命令
在服务器上查找时间的最基本的命令是date
。 任何用户都可以键入此命令打印日期和时间:
date
OutputWed 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
OutputWed Apr 26 13:55:45 EDT 2017
时区缩写应反映新选择的值。
现在我们知道如何检查时钟并设置时区,让我们确保我们的时间正确同步。
使用timedatectl控制timeyncd
直到最近,大多数网络时间同步由网络时间协议守护程序或ntpd处理。 该服务器连接到其他NTP服务器池,为其提供恒定和准确的时间更新。
Ubuntu的默认安装现在使用timesyncd而不是ntpd。 timesyncd连接到同一时间服务器并以大致相同的方式工作,但是更轻便,更加集成了系统级和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
表示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
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服务器(或p eers)的信息。 您的输出将略有不同,但应列出默认的Ubuntu池服务器加上其他几个。 请记住,ntpd可能需要几分钟才能建立连接。
结论
在本文中,我们展示了如何查看系统时间,更改时区,使用Ubuntu的默认timesyncd并安装ntpd。 如果您具有比我们所涵盖的更复杂的计时需求,则可以参考官方的NTP文档 ,还可以查看NTP Pool Project ,这是一个全球志愿者团队,提供世界上大部分的NTP基础架构。