在 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.service
ntpd.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 true
,systemd-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
最初适用于嵌入式系统和其他用例,在这些用例中,拥有“人类规模”的正确时间很好,但不一定要达到非常高的精度。
通过配置良好chronyd
或ntpd
附近有一组良好的 NTP 服务器,您可以将系统同步到毫秒或更短的时间。
如果您需要系统同步到微秒甚至更好,您可以通过仔细调整来使用 NTP,但在这种情况下最好使用 PTP。
请注意,经典的开发ntpd
在最近一两年陷入停滞,并且存在一些已知的安全问题。较新的实现如chronyd
和NTP安全可能更安全。