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