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

介绍

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

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

前提条件

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

导航基本时间指令

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

1date
1[secondary_label Output]
2Tue Sep 4 17:51:49 UTC 2018

最常见的是,您的服务器将默认设置为 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]
2Tue Sep 4 13:52:57 EDT 2018

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

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

查看 ntpd 的状态

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

1sudo systemctl status ntp
 1[secondary_label Output]
 2 ntp.service - LSB: Start NTP daemon
 3   Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
 4   Active: active (running) since Tue 2018-09-04 15:07:03 EDT; 30min ago
 5     Docs: man:systemd-sysv-generator(8)
 6  Process: 876 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
 7    Tasks: 2 (limit: 4915)
 8   CGroup: /system.slice/ntp.service
 9           └─904 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109
10. . .

活跃(运行)状态表明 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-eterna.binary.n 204.9.54.119 2 u 240 256 377 35.392 0.142 0.211
 9-static-96-244-9 192.168.10.254 2 u 60 256 377 10.242 1.297 2.412
10+minime.fdf.net 83.157.230.212 3 u 99 256 377 24.042 0.128 0.250
11*t1.time.bf1.yah 98.139.133.62 2 u 31 256 377 11.112 0.621 0.186
12+x.ns.gin.ntt.ne 249.224.99.213 2 u 108 256 377 1.290   -0.073 0.132
13-ord1.m-d.net 142.66.101.13 2 u 473 512 377 19.930   -1.764 0.293

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

切换到 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: /lib/systemd/system/systemd-timesyncd.service.d
 5           └─disable-with-time-daemon.conf
 6   Active: active (running) since Tue 2018-09-04 16:14:23 EDT; 1s ago
 7     Docs: man:systemd-timesyncd.service(8)
 8 Main PID: 3399 (systemd-timesyn)
 9   Status: "Synchronized to time server 198.60.22.240:123 (0.debian.pool.ntp.org)."
10    Tasks: 2 (limit: 4915)
11   CGroup: /system.slice/systemd-timesyncd.service
12           └─3399 /lib/systemd/systemd-timesyncd

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

1timedatectl
1[secondary_label Output]
2      Local time: Tue 2018-09-04 16:15:34 EDT
3  Universal time: Tue 2018-09-04 20:15:34 UTC
4        RTC time: Tue 2018-09-04 20:15:33
5       Time zone: America/New_York (EDT, -0400)
6 Network time on: yes
7NTP synchronized: yes
8 RTC in local TZ: no

这会打印本地时间、通用时间(如果您没有从UTC时区切换,可能与本地时间相同),以及某些网络时间状态信息。 网络时间:是的 意味着 timesyncd 已启用,而 NTP 同步:是的 表示时间已成功同步。

结论

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

Published At
Categories with 技术
comments powered by Disqus