NTP 服务显示“不活动”并带有“timedatectl status”

NTP 服务显示“不活动”并带有“timedatectl status”

在 Archlinux 主机上,我注意到该命令timedatectl status返回了正确的时间结果(本地和 UTC),但也提到 NTP 服务处于非活动状态。

这让我觉得很奇怪,因为ntpd.service在该机器上已启用并处于活动状态,即使systemd-timesynd.service存在但未启用。

https://unix.stackexchange.com/a/542959/72707我看到只要systemd-timesync.service可用,就可以执行以下操作:

# timedatectl set-ntp true

足以在 的输出中显示活动的 NTP 服务timedatectl status

我还看到它自动启用并激活systemd-timesync.service

因此我的问题是:我到底
需要吗?和ntpd.service两者是否有不同的需求?systemd-timesync.servicentpd.service

答案1

引用@don_crissti的评论来直接回答OP的询问:

如果您使用的是 timesyncd,则不需要 ntpd.service。我在几个甚至没有安装 ntp 软件包的桌面上使用后者。在这里阅读有关它的 arch wiki 条目:wiki.archlinux.org/title/Systemd-timesyncd

除了这句话之外,在现代版本的timedatectl(和相应的systemd-timedated)中,文件中还有一个时间同步服务列表/usr/lib/systemd/ntp-units.d/*.list。与往常一样,您可以使用/usr/local/lib/systemd/ntp-units.d/*.list文件来timedatectl了解本地管理的(= 不是从软件包安装的)时间同步服务,或者/etc/systemd/ntp-units.d/*.list对现有时间同步服务列表进行管理覆盖。

SYSTEMD_TIMEDATED_NTP_SERVICES设置服务的环境变量systemd-timedated是覆盖时间同步服务列表的另一种方法。

当您执行 a 时timedatectl set-ntp truesystemd-timedated将查看其时间同步服务名称列表,并启动第一个列出的实际可用的服务。

为了让你timedatectl意识到ntpd.service,你可以这样做:

echo "ntpd.service" | sudo tee /etc/systemd/ntp-units.d/10-ntpd.list

systemd-timesyncd最初是作为一种简约服务开发的,只是定期从 NTP 服务器(实际上是 SNTP 客户端)获取时间。它似乎正在发展成为一个更完整的 NTP 客户端,但我不确定它与ntpd目前的经典版本相比如何。

功能更全的 NTP 同步服务(如chronyd或 )ntpd还将不断测量本地系统和 NTP 时间源之间的数据包往返时间,对其进行补偿,并且还测量和补偿本地系统时钟的系统误差。

systemd-timesyncd最初适用于嵌入式系统和其他用例,在这些用例中,拥有“人类规模”的正确时间很好,但不一定要达到非常高的精度。

通过配置良好chronydntpd附近有一组良好的 NTP 服务器,您可以将系统同步到毫秒或更短的时间。

如果您需要系统同步到微秒甚至更好,您可以通过仔细调整来使用 NTP,但在这种情况下最好使用 PTP。

请注意,经典的开发ntpd在最近一两年陷入停滞,并且存在一些已知的安全问题。较新的实现如chronydNTP安全可能更安全。

相关内容