为什么 systemd 拒绝我的单元名称,因为“既不是有效的调用 ID 也不是单元名称”?

为什么 systemd 拒绝我的单元名称,因为“既不是有效的调用 ID 也不是单元名称”?

我需要覆盖ExecStart参数systemd模板。我已确认该单元文件存在且通过了验证。[email protected]/override.conf在某些机器上,添加文件效果很好:

user@prod-west-1604$ systemctl --version | head -1
systemd 229
user@prod-west-1604$ file -b /etc/systemd/system/[email protected]
symbolic link to /lib/systemd/system/nginx.service

user@prod-west-1604$ sudo systemctl edit [email protected]
# (opens editor as expected)

但是,在运行较新版本的 systemd 的机器上,操作失败:

user@prod-east-1810$ systemctl --version | head -1
systemd 239
user@prod-east-1810$ file -b /etc/systemd/system/[email protected]
symbolic link to /lib/systemd/system/nginx.service

user@prod-east-1810$ sudo systemctl edit [email protected]
Failed to get the load state of [email protected]: Unit name [email protected] is neither a valid invocation ID nor unit name.

为什么

答案1

这是由于systemdv233 中出现的错误已在 v240 中修复. 无需升级systemd,在大多数情况下,systemctl edit只不过是以下操作的捷径:

sudo mkdir -p /etc/systemd/system/[email protected]/
sudo vim /etc/systemd/system/[email protected]/override.conf

覆盖文件将起作用,即使在systemdsystemctl edit该命令不起作用的版本。不要忘记使用以下命令应用新配置:

sudo systemctl daemon-reload

答案2

我收到了同样的错误消息,关于“既不是有效的调用 ID,也不是单元名称' 启动服务失败,但修复方法与接受的答案不同,并且与错误无关。错误消息完全是转移注意力的借口,浪费时间,我将在下面解释。

我的问题出在 systemdnetfilter-persistent服务上。错误消息让我相信 systemd-gears 启动服务时出现了问题。然后我突然想到:如果在iptables规则.v4“服务叫什么?

是的:服务无法启动,因为需要依赖文件来启动它,在本例中是“规则.v4“出现错误。这没有出现在systemctl status或中journalctl -xe。sed 表达式无法匹配并将占位符替换为子网。一旦我正确构建了规则文件,服务就会正确启动。

当调查此错误消息时,不要只关注 systemd 服务定义本身,而忽略了可能出现错误的任何被调用的依赖文件。

无论如何,希望这可以避免其他人因这个错误信息而陷入困境。

相关内容