如何在 Debian 10 上设置时间同步

介绍

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

Debian 10 具有内置和默认启用时间同步,使用ntp包提供的标准 ntpd 时间服务器. 在本文中,我们将研究一些基本的时间相关的命令,验证 ntpd 是否活跃并与同行连接,并学习如何激活替代系统d-timesyncd 网络时间服务。

前提条件

在启动本教程之前,您将需要一个具有非根、‘sudo’功能的用户的 Debian 10 服务器,如在 Debian 10 服务器安装教程中所述。

步骤 1 – 导航基本时间命令

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

1date
1[secondary_label Output]
2Wed 31 Jul 2019 06:03:19 PM UTC

最常见的是,您的服务器将默认设置为 UTC 时区,如上文所示。UTC 是 Coordinated Universal Time,即零度长度的时间。

如果您有不同的要求,并且需要更改时区,您可以使用timedatectl命令来做到这一点。

首先,列出可用的时区:

1timedatectl list-timezones

一个时区列表将打印到你的屏幕上。你可以按SPACE按下页面,然后按b按上页面.一旦你找到正确的时区,请记住它,然后键入q离开列表。

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

1sudo timedatectl set-timezone America/New_York

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

1date
1[secondary_label Output]
2Wed 31 Jul 2019 02:08:43 PM EDT

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

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

步骤 2 – 检查 ntpd 的状态

默认情况下,Debian 10 运行了标准的 ntpd 服务器,以保持您的系统时间同步到一群外部时间服务器。

1sudo systemctl status ntp
 1[secondary_label Output]
 2 ntp.service - Network Time Service
 3   Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled)
 4   Active: active (running) since Wed 2019-07-31 13:57:08 EDT; 17min ago
 5     Docs: man:ntpd(8)
 6 Main PID: 429 (ntpd)
 7    Tasks: 2 (limit: 1168)
 8   Memory: 2.1M
 9   CGroup: /system.slice/ntp.service
10           └─429 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 106:112
11. . .

活跃(运行)状态表明 ntpd 已经开始正确,我们可以使用ntpq命令获取有关 ntpd 状态的更多信息:

1ntpq -p
 1[secondary_label Output]
 2     remote refid st t when poll reach delay offset jitter
 3==============================================================================
 4 0.debian.pool.n .POOL. 16 p    -   64 0 0.000 0.000 0.000
 5 1.debian.pool.n .POOL. 16 p    -   64 0 0.000 0.000 0.000
 6 2.debian.pool.n .POOL. 16 p    -   64 0 0.000 0.000 0.000
 7 3.debian.pool.n .POOL. 16 p    -   64 0 0.000 0.000 0.000
 8+208.67.72.50 152.2.133.55 2 u 12 64 377 39.381 1.696 0.674
 9+198.46.223.227 204.9.54.119 2 u 6 64 377 22.671 3.536 1.818
10-zinc.frizzen.ne 108.61.56.35 3 u 43 64 377 12.012 1.268 2.553
11-pyramid.latt.ne 204.123.2.72 2 u 11 64 377 69.922 2.858 0.604
12+nu.binary.net 128.252.19.1 2 u 10 64 377 35.362 3.148 0.587
13#107.155.79.108 129.7.1.66 2 u 65 64 377 42.380 1.638 1.014
14+t1.time.bf1.yah 98.139.133.62 2 u 6 64 377 11.233 3.305 1.118
15*sombrero.spider 129.6.15.30 2 u 47 64 377 1.304 2.941 0.889
16+hydrogen.consta 209.51.161.238 2 u 45 64 377 1.830 2.280 1.026
17-4.53.160.75 142.66.101.13 2 u 42 64 377 29.077 2.997 0.789
18#horp-bsd01.horp 146.186.222.14 2 u 39 64 377 16.165 4.189 0.717
19-ntpool1.603.new 204.9.54.119 2 u 46 64 377 27.914 3.717 0.939

ntpq 是 ntpd 的查询工具. -p 标志要求有关 ntpd 所连接的 NTP 服务器(或 peers)的信息. 您的输出将略有不同,但应该列出默认的 Debian 池服务器以及其他一些。

步骤 3 — 切换到 systemd-timesyncd

可以使用 systemd 的内置 timesyncd 组件来替代 ntpd. timesyncd 是对 ntpd 的轻量级替代品,它与 systemd 更加集成,但请注意,它不支持作为时间服务器运行,并且在其用于保持系统时间同步的技术上略微不复杂。

要使用 timesyncd,我们必须先卸载 ntpd:

1sudo apt purge ntp

然后,启动 timesyncd 服务:

1sudo systemctl start systemd-timesyncd

最后,检查服务的状态,以确保它正在运行:

1sudo systemctl status systemd-timesyncd
 1[secondary_label Output]
 2 systemd-timesyncd.service - Network Time Synchronization
 3   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
 4  Drop-In: /usr/lib/systemd/system/systemd-timesyncd.service.d
 5           └─disable-with-time-daemon.conf
 6   Active: active (running) since Wed 2019-07-31 14:21:37 EDT; 6s ago
 7     Docs: man:systemd-timesyncd.service(8)
 8 Main PID: 1681 (systemd-timesyn)
 9   Status: "Synchronized to time server for the first time 96.245.170.99:123 (0.debian.pool.ntp.org)."
10    Tasks: 2 (limit: 1168)
11   Memory: 1.3M
12   CGroup: /system.slice/systemd-timesyncd.service
13           └─1681 /lib/systemd/systemd-timesyncd

我们可以使用timedatectl来打印 systemd 对时间的当前理解:

1timedatectl
1[secondary_label Output]
2               Local time: Wed 2019-07-31 14:22:15 EDT
3           Universal time: Wed 2019-07-31 18:22:15 UTC
4                 RTC time: n/a
5                Time zone: America/New_York (EDT, -0400)
6System clock synchronized: yes
7              NTP service: active
8          RTC in local TZ: no

这会打印本地时间、通用时间(如果您没有从UTC时区切换,可能与本地时间相同),以及一些网络时间状态信息。 系统时钟同步:是的 意味着时间已成功同步,而 NTP 服务:活跃 意味着 timesyncd 已启用并运行。

结论

在本文中,我们展示了如何查看系统时间、更改时区、使用 ntpd 工作,并切换到 systemd 的 timesyncd 服务. 如果您有比我们这里所涵盖的更复杂的计时需求,您可以参阅 官方 NTP 文档,以及看看 NTP 池项目,一个全球性的志愿者群体,提供世界上大部分 NTP 基础设施。

Published At
Categories with 技术
comments powered by Disqus