介绍
准确的时间保持已成为现代软件部署的关键组成部分,无论是确保日志以正确的顺序记录,还是正确应用数据库更新,同步时间可能会导致错误,数据损坏和其他难以调试的问题。
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
设置时区,确保您用您在列表中发现的时区替换下面的突出部分,您需要使用sudo
和timedatectl
来进行此更改:
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 基础设施。