如何在Debian10上设置时间同步
介绍
准确计时已成为现代软件部署的关键组成部分。 无论是确保以正确的顺序记录日志还是正确应用数据库更新,不同步时间都可能导致错误、数据损坏和其他难以调试的问题。
Debian 10 内置了时间同步,默认情况下使用标准 ntpd 时间服务器激活,由 ntp
软件包提供。 在本文中,我们将了解一些与时间相关的基本命令,验证 ntpd 是否处于活动状态并连接到对等点,并学习如何激活备用 systemd-timesyncd 网络时间服务。
先决条件
在开始本教程之前,您需要一个 Debian 10 服务器,该服务器具有非 root、启用 sudo
的用户,如 this Debian 10 server setup tutorial 中所述。
第 1 步 — 导航基本时间命令
查找服务器时间的最基本命令是 date
。 任何用户都可以键入此命令来打印出日期和时间:
date
OutputWed 31 Jul 2019 06:03:19 PM UTC
大多数情况下,您的服务器将默认为 UTC 时区,如上面的输出中突出显示的那样。 UTC 是 协调世界时 ,即零度经度的时间。 当您的基础设施跨越多个时区时,始终使用世界时可以减少混乱。
如果您有不同的要求,需要更改时区,可以使用 timedatectl
命令进行。
首先,列出可用的时区:
timedatectl list-timezones
时区列表将打印到您的屏幕上。 您可以按 SPACE
向下翻页,按 b
向上翻页。 找到正确的时区后,记下它,然后键入 q
退出列表。
现在使用 timedatectl set-timezone
设置时区,确保将下面突出显示的部分替换为您在列表中找到的时区。 您需要使用 sudo
和 timedatectl
进行此更改:
sudo timedatectl set-timezone America/New_York
您可以通过再次运行 date
来验证您的更改:
date
OutputWed 31 Jul 2019 02:08:43 PM EDT
时区缩写应反映新选择的值。
现在我们知道如何检查时钟和设置时区,让我们确保我们的时间正确同步。
第 2 步 — 检查 ntpd 的状态
默认情况下,Debian 10 运行标准 ntpd 服务器,以使您的系统时间与外部时间服务器池保持同步。 我们可以使用 systemctl
命令检查它是否正在运行:
sudo systemctl status ntp
Output● ntp.service - Network Time Service Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2019-07-31 13:57:08 EDT; 17min ago Docs: man:ntpd(8) Main PID: 429 (ntpd) Tasks: 2 (limit: 1168) Memory: 2.1M CGroup: /system.slice/ntp.service └─429 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 106:112 . . .
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 +208.67.72.50 152.2.133.55 2 u 12 64 377 39.381 1.696 0.674 +198.46.223.227 204.9.54.119 2 u 6 64 377 22.671 3.536 1.818 -zinc.frizzen.ne 108.61.56.35 3 u 43 64 377 12.012 1.268 2.553 -pyramid.latt.ne 204.123.2.72 2 u 11 64 377 69.922 2.858 0.604 +nu.binary.net 128.252.19.1 2 u 10 64 377 35.362 3.148 0.587 #107.155.79.108 129.7.1.66 2 u 65 64 377 42.380 1.638 1.014 +t1.time.bf1.yah 98.139.133.62 2 u 6 64 377 11.233 3.305 1.118 *sombrero.spider 129.6.15.30 2 u 47 64 377 1.304 2.941 0.889 +hydrogen.consta 209.51.161.238 2 u 45 64 377 1.830 2.280 1.026 -4.53.160.75 142.66.101.13 2 u 42 64 377 29.077 2.997 0.789 #horp-bsd01.horp 146.186.222.14 2 u 39 64 377 16.165 4.189 0.717 -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 池服务器以及其他一些服务器。 请记住,ntpd 建立连接可能需要几分钟时间。
第 3 步 — 切换到 systemd-timesyncd
可以使用 systemd 内置的 timesyncd 组件来替换 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: /usr/lib/systemd/system/systemd-timesyncd.service.d └─disable-with-time-daemon.conf Active: active (running) since Wed 2019-07-31 14:21:37 EDT; 6s ago Docs: man:systemd-timesyncd.service(8) Main PID: 1681 (systemd-timesyn) Status: "Synchronized to time server for the first time 96.245.170.99:123 (0.debian.pool.ntp.org)." Tasks: 2 (limit: 1168) Memory: 1.3M CGroup: /system.slice/systemd-timesyncd.service └─1681 /lib/systemd/systemd-timesyncd
我们可以使用timedatectl
打印出systemd当前对时间的理解:
timedatectl
Output Local time: Wed 2019-07-31 14:22:15 EDT Universal time: Wed 2019-07-31 18:22:15 UTC RTC time: n/a Time zone: America/New_York (EDT, -0400) System clock synchronized: yes NTP service: active RTC in local TZ: no
这会打印出本地时间、世界时间(如果您没有从 UTC 时区切换,可能与本地时间相同)和一些网络时间状态信息。 System clock synchronized: yes
表示时间同步成功,NTP service: active
表示timesyncd开启并运行。
结论
在本文中,我们展示了如何查看系统时间、更改时区、使用 ntpd 以及切换到 systemd 的 timesyncd 服务。 如果您有比我们在这里介绍的更复杂的计时需求,您可以参考 官方 NTP 文档 ,还可以查看 NTP 池项目 ,一个全球组提供世界上大部分 NTP 基础设施的志愿者。