介绍
准确的计时已成为现代软件部署的关键组成部分. 无论是确保以正确的顺序记录日志还是正确应用数据库更新, 不同步的时间都可能导致错误, 数据损坏和其他难以调试的问题.
Ubuntu 18.04 内置了时间同步, 默认情况下使用 systemd 的 timesyncd 服务激活. 在本文中, 我们将介绍一些与时间相关的基本命令, 验证 timesyncd 是否处于活动状态, 并了解如何安装备用网络时间服务.
准备
在开始本教程之前, 您将需要一个 Ubuntu 18.04 服务器, 该服务器具有 sudo 权限的非 root 用户. 没有服务器的同学可以在这里购买 https://cloud.tencent.com/product/cvm , 不过我个人更推荐您使用免费的腾讯云开发者实验室 https://cloud.tencent.com/developer/labs 进行试验, 学会安装后再购买服务器 https://cloud.tencent.com/product/cvm .
导航基本时间命令
查找服务器上时间的最基本命令是 date. 任何用户都可以输入此命令来打印日期和时间:
- date
- Tue Jul 10 14:48:52 UTC 2018
大多数情况下, 您的服务器将默认为 UTC 时区, 如上面的输出所示. UTC 是世界协调时间, 经度为零度的时间. 当您的基础架构跨越多个时区时, 始终如一地使用通用时间可以减少混淆.
如果您有不同的要求并需要更改时区, 则可以使用该 timedatectl 命令执行此操作.
首先, 列出可用的时区:
timedatectl list-timezones
时区列表将打印到您的屏幕. 您可以按 SPACE 向下翻页, 按 b 向上翻页. 找到正确的时区后, 记下它, 然后键入 q 以退出列表.
现在用 timedatectl set-timezone 设置时区, 确保将下面突出显示的部分替换为您在列表中找到的时区. 你需要使用 timedatectl 的 sudo 来进行更改:
sudo timedatectl set-timezone America/New_York
您可以再次运行 date 来验证更改:
- date
- Tue Jul 10 10:50:53 EDT 2018
时区缩写应反映新选择的值.
现在我们知道如何检查时钟和设置时区, 让我们确保我们的时间正确同步.
使用 timedatectl 控制时间同步
直到最近, 大多数网络时间同步都由网络时间协议守护程序或 ntpd 处理. 此服务连接到其他 NTP 服务器池, 为其提供持续且准确的时间更新.
Ubuntu 的默认安装现在使用 timesyncd 而不是 ntpd.timesyncd 连接到相同的时间服务器, 并以大致相同的方式工作, 但更轻量级, 更集成 systemd 和 Ubuntu 的低级别工作.
我们可以通过不带参数运行 timedatectl 来查询 timesyncd 的状态. 在这种情况下你不需要使用 sudo 权限:
- timedatectl
- 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
尽管时间同步对于大多数目的来说都很好, 但是对于即使是最轻微的时间扰动非常敏感的一些应用程序也可以通过 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
- 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 标志要求提供关于所述 NTP 服务器 (或信息 p EERS)NTPD 已连接到. 您的输出会略有不同, 但应列出默认的 Ubuntu 池服务器以及其他一些服务器. 请记住, ntpd 建立连接可能需要几分钟时间.
结论
在本文中, 我们展示了如何查看系统时间, 更改时区, 使用 Ubuntu 的默认时间同步以及安装 ntpd. 如果您有比我们在此处所述的更复杂的计时需求, 您可以参考官方的 NTP 文档, 还可以查看 NTP 池项目 http://www.pool.ntp.org/ , 这是一个全球性的志愿者团队, 提供世界上大部分的 NTP 基础设施.
来源: https://www.qcloud.com/developer/article/1356844