我已经用它systemd-timesyncd
作为我的系统计时器好几年了。我为我的 Raspberry Pi 运行一个名为raspbian的 Debian衍生产品。我对 SNTP 客户端非常满意,但想尝试在离网应用程序中使用。systemd-timesyncd
chronyd
以下命令可用于列出配置systemd-timesyncd
:
$ systemctl cat systemd-timesyncd
在 中buster
,此清单中有一段代码,systemd-timesyncd
如果发现安装了另一个计时服务(NTP 守护进程),则可以“自行原谅”:
# /lib/systemd/system/systemd-timesyncd.service.d/disable-with-time-daemon.conf
[Unit]
# don't run timesyncd if we have another NTP daemon installed
ConditionFileIsExecutable=!/usr/sbin/ntpd
ConditionFileIsExecutable=!/usr/sbin/openntpd
ConditionFileIsExecutable=!/usr/sbin/chronyd
ConditionFileIsExecutable=!/usr/sbin/VBoxService
在发布后的某个时刻buster
(与发布bullseye
??同时发布),上述方案被更改;如果发现其他计时器,该命令systemctl cat systemd-timesyncd
不再包含任何限制或禁止启动的引用。systemd-timesyncd
有谁还记得这个变化的历史吗?更重要的是,systemd-timesyncd
如果发现安装了另一个计时守护进程,是否仍然会抑制其启动?这是在哪里/如何完成的?
该
systemd-timesyncd
服务本身不再检查冲突。相反,冲突是通过systemd-timesyncd
在自己的包中处理的,这与其他时间服务包冲突:因此现在不可能安装两个时间服务器(使用 Debian 包)。更详细地说,其工作方式是
systemd-timesyncd
包有一个Conflicts: time-daemon
条目。time-daemon
是所有时间守护进程提供的虚拟包,它们都与其冲突,因此一次只能安装一个时间守护进程(包不能与自身冲突,因此明显的自冲突不是问题)。这是 Debian 中的标准机制,用于确保提供提供给定功能的集合中的单个包。包拆分很重要,因为无法在systemd
包本身上定义此类包冲突。这可能看起来更脆弱,因为它不处理手动安装的时间服务器。然而,这些无论如何都不应该进入
/usr/sbin
,所以之前的方案也无法处理它们。最重要的是,自动启用和禁用时间守护进程被证明是不可靠的,而且当时似乎不可能修复这个问题。