当运行timedatectl
检查我的系统时钟是否已通过 NTP 同步时,我得到以下信息:
~> timedatectl
Failed to query server: The name org.freedesktop.timedate1 was not provided by any .service files
systemd-timedated.service 已运行。
~> systemctl status systemd-timedated.service
● systemd-timedated.service - Time & Date Service
Loaded: loaded (/usr/lib/systemd/system/systemd-timedated.service; static; vendor preset: enabled)
Active: inactive (dead)
Docs: man:systemd-timedated.service(8)
man:localtime(5)
https://www.freedesktop.org/wiki/Software/systemd/timedated
Mar 23 14:28:16 cm1sd systemd[1]: Starting Time & Date Service...
Mar 23 14:28:16 cm1sd systemd[1]: Started Time & Date Service.
Mar 23 14:29:00 cm1sd systemd[1]: systemd-timedated.service: Succeeded.
在网上查看我没有发现任何谈论此错误消息的内容。如何使用 systemd 和 timedatectl 使我的系统时钟与 NTP 服务器同步?我还注意到 /etc/systemd/ 下没有任何内容定义要使用的 NTP 服务器。我使用的是嵌入式 Linux 系统,使用 Buildroot、systemd 版本 244.5 构建。
答案1
如果您使用的是Active Directory / Centrify,您可以尝试重新启动服务器。这就是他们建议我们做的事情,这对我们很有效。然而,我不清楚根本原因是什么,如果它是一个共享服务器,你不能随意重新启动它,这也不是很令人满意。
答案2
systemd-timedated
是一个使用 D-Bus 与其客户端进行通信的服务,就像timedatectl
命令一样。应该systemctl cat systemd-timedated.service
包括BusName=org.freedesktop.timedate1
,它将告诉systemd
如何监视该服务、分配它Type=dbus
并使其依赖于该dbus.socket
单元。systemd
每当系统 D-Bus 上有任何请求时,它还允许“按需”启动服务。
错误消息表明,无论何时都systemd
无法启动systemd-timedated
timedatectl
在调用
systemd-timedated
本质上只是一个统一的“前端”,用于设置系统时钟、默认时区和启动/停止实际时钟同步服务,例如chronyd.service
、systemd-timesyncd.service
或ntp.service
。您实际上可以通过在覆盖文件中定义环境变量来定义搜索实际同步服务的优先顺序systemd-timedated
,例如:
[Service]
Environment=SYSTEMD_TIMEDATED_NTP_SERVICES=chronyd.service:ntp.service:systemd-timesyncd.service
您仍然需要使用最终使用的实际 NTP 服务的配置文件来配置要使用的 NTP 服务器,或者必须配置 NTP 服务以从 DHCP 响应中获取 NTP 服务器地址(如果适用)。systemd-timesyncd
如果您使用它systemd-networkd
来配置 NIC,则会自动执行此操作;否则,您可能需要配置 DHCP 客户端来请求 NTP 服务器地址,并以对 NTP 服务有用的形式将该信息存储在某处。
在嵌入式系统中,我认为最小化系统 D-Bus 可能是一个有效的选择,具体取决于系统的用途。消除非必要的前端服务(例如systemd-timedated
并依赖经典的命令行工具)可能是其中的一部分。那么,你确定systemd-timedated
应该在工作吗?