systemd-timesyncd.service 启动失败

pat*_*eza 12 services system-date ntp systemd

我尝试启动systemd-timesyncd.service服务但失败了:

root@xxxx:~# systemctl start systemd-timesyncd.service
root@xxxx:~# systemctl status systemd-timesyncd.service
? systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           ??disable-with-time-daemon.conf
   Active: inactive (dead)
Condition: start condition failed at pi? 2015-07-10 15:17:56 CEST; 1s ago
           ConditionFileIsExecutable=!/usr/sbin/ntpd was not met
     Docs: man:systemd-timesyncd.service(8)
Run Code Online (Sandbox Code Playgroud)

什么意思:ConditionFileIsExecutable=!/usr/sbin/ntpd was not met
此消息表明缺乏执行权限,但事实并非如此:

root@xxxx:~# ls -l /usr/sbin/ntpd
-rwxr-xr-x 1 root root 549648 kwi 10 21:04 /usr/sbin/ntpd
Run Code Online (Sandbox Code Playgroud)

小智 14

感叹号否定条件;换句话说,失败的条件是:“如果可执行文件 /usr/sbin/ntpd 不存在,则启用”。这对您来说失败了,因为 /usr/bin/ntpd 确实存在并且是可执行的。

这行背后的逻辑是 systemd-timesyncd 只有在没有安装 ntpd 的情况下才应该启用;否则它将是多余的(充其量)或干扰 ntpd(最坏的情况)。由于您或您的发行版安装了 ntpd,timesyncd 的服务文件会使其退出并让 ntpd 成为您的 NTP 客户端。

如果你想调整 systemd-timesyncd,你应该删除 ntpd。如果您只想尝试进行测试,您可以通过创建一个/etc/systemd/system/systemd-timesyncd.service包含以下内容的文件来覆盖服务文件中的行:

ConditionFileIsExecutable=
Run Code Online (Sandbox Code Playgroud)