我需要覆盖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 服务定义本身,而忽略了可能出现错误的任何被调用的依赖文件。
无论如何,希望这可以避免其他人因这个错误信息而陷入困境。