介绍
准确的计时已成为现代软件部署的关键组成部分。 无论是确保以正确的顺序记录日志还是正确应用数据库更新,不同步的时间都可能导致错误,数据损坏和其他难以调试的问题。
Debian 9内置了时间同步,默认情况下使用ntp
软件包提供的标准ntpd时间服务器激活。 在本文中,我们将介绍一些与时间相关的基本命令,验证ntpd是否处于活动状态并连接到对等端,并了解如何激活备用systemd-timesyncd网络时间服务。
先决条件
在开始本教程之前,您将需要一个Debian 9服务器,该服务器具有非root,sudo启用的用户,如本Debian 9服务器设置教程中所述 。
导航基本时间命令
查找服务器上date
最基本命令是date
。 任何用户都可以输入此命令来打印日期和时间:
date
OutputTue Sep 4 17:51:49 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
OutputTue Sep 4 13:52:57 EDT 2018
时区缩写应反映新选择的值。
现在我们知道如何检查时钟和设置时区,让我们确保我们的时间正确同步。
检查ntpd的状态
默认情况下,Debian 9运行标准的ntpd服务器,以使您的系统时间与外部时间服务器池保持同步。 我们可以使用systemctl
命令检查它是否正在运行:
sudo systemctl status ntp
Output● ntp.service - LSB: Start NTP daemon
Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
Active: active (running) since Tue 2018-09-04 15:07:03 EDT; 30min ago
Docs: man:systemd-sysv-generator(8)
Process: 876 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/ntp.service
└─904 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109
. . .
active (running)
状态表示ntpd正常启动。 要获得有关ntpd状态的更多信息,我们可以使用ntpq
命令:
ntpq -p
Output remote refid st t when poll reach delay offset jitter
==============================================================================
0.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.debian.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
-eterna.binary.n 204.9.54.119 2 u 240 256 377 35.392 0.142 0.211
-static-96-244-9 192.168.10.254 2 u 60 256 377 10.242 1.297 2.412
+minime.fdf.net 83.157.230.212 3 u 99 256 377 24.042 0.128 0.250
*t1.time.bf1.yah 98.139.133.62 2 u 31 256 377 11.112 0.621 0.186
+x.ns.gin.ntt.ne 249.224.99.213 2 u 108 256 377 1.290 -0.073 0.132
-ord1.m-d.net 142.66.101.13 2 u 473 512 377 19.930 -1.764 0.293
ntpq
是ntpd的查询工具。 -p
标志要求提供有关ntpd所连接的NTP服务器(或页面)的信息。 您的输出会略有不同,但应列出默认的Debian池服务器以及其他一些服务器。 请记住,ntpd建立连接可能需要几分钟时间。
切换到systemd-timesyncd
可以使用systemd的内置时间同步组件来替换ntpd。 timesyncd是ntpd的轻量级替代品,与systemd集成得更多。 但请注意,它不支持作为时间服务器运行,并且它在用于保持系统时间同步的技术方面稍微不那么复杂。 如果您正在运行复杂的实时分布式系统,您可能希望坚持使用ntpd。
要使用timesyncd,我们必须首先卸载ntpd:
sudo apt purge ntp
然后,启动timesyncd服务:
sudo systemctl start systemd-timesyncd
最后,检查服务的状态以确保它正在运行:
sudo systemctl status systemd-timesyncd
Output● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: active (running) since Tue 2018-09-04 16:14:23 EDT; 1s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 3399 (systemd-timesyn)
Status: "Synchronized to time server 198.60.22.240:123 (0.debian.pool.ntp.org)."
Tasks: 2 (limit: 4915)
CGroup: /system.slice/systemd-timesyncd.service
└─3399 /lib/systemd/systemd-timesyncd
我们可以使用timedatectl
打印出systemd当前对时间的理解:
timedatectl
Output Local time: Tue 2018-09-04 16:15:34 EDT
Universal time: Tue 2018-09-04 20:15:34 UTC
RTC time: Tue 2018-09-04 20:15:33
Time zone: America/New_York (EDT, -0400)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
这将打印出本地时间,通用时间(如果您没有从UTC时区切换,可能与本地时间相同),以及一些网络时间状态信息。 Network time on: yes
表示启用了timesyncd,并且NTP synchronized: yes
表示时间已成功同步。
结论
在本文中,我们展示了如何查看系统时间,更改时区,使用ntpd以及切换到systemd的timesyncd服务。 如果您有比我们在此处所述的更复杂的计时需求,您可以参考官方的NTP文档 ,还可以查看NTP池项目 ,这是一个全球志愿者团队,提供世界上大部分的NTP基础设施。