我无法弄清楚如何删除不再有文件的 systemd 单元。他们似乎仍然以某种方式徘徊在系统中。
我要删除的旧损坏单元:
core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
UNIT LOAD ACTIVE SUB DESCRIPTION
<E2><97><8F> [email protected] not-found failed failed [email protected]
<E2><97><8F> [email protected] not-found failed failed [email protected]
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
这些文件不存在,但重新加载仍然有这些单位挥之不去:
core@ip-172-16-32-83 ~ $ systemctl list-unit-files [email protected]
core@ip-172-16-32-83 ~ $ sudo systemctl daemon-reload
core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
UNIT LOAD ACTIVE SUB DESCRIPTION
<E2><97><8F> [email protected] not-found failed failed [email protected]
<E2><97><8F> [email protected] not-found failed failed [email protected]
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
我找不到与它们相关的文件:
core@ip-172-16-32-83 ~ $ sudo find /var/run/systemd -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /etc/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /usr/lib/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $
那么我该如何摆脱这些呢?
您要执行的命令是
systemctl reset-failed
当 systemd 分析单元定义文件时,它会记录文件中调用的任何其他相关单元——无论这些其他单元是否存在。
当一个单元显示为“未找到”时,它不一定是错误 - 我们所知道的是,本地单元定义声称与它有某种关系。这种关系可能不是我们关心的。例如,它可能是
"Before:"
某个其他单位,但我们不使用该其他单位。failed
- 当一个单元进入故障状态并且可以使用systemctl reset-failed
命令重置时发生not-found
- 当您删除了一个单元但 systemd 仍然有对它的引用时发生,例如当一个单元被启用并且一个符号链接被放置时/etc/systemd/system
,这可以通过删除对单元的引用/etc/system/systemd/*.wants/
然后运行来修复systemctl daemon-reload
例如,假设以下 bash 脚本:
和 3 个系统单元:
example-foo.service
、、example-bar.service
和example-baz.service
现在,让我们开始并启用这些单元。观察符号链接是如何创建的。
确认我们的 3 个单元实际上有 6 个文件。
现在,检查所有 3 个单元的状态,它们正在运行。
现在,通过向
example-foo.service
. 观察设备如何处于故障状态。要重置处于故障状态的单元,请使用该
systemctl rese-failed
命令。观察设备现在如何处于非活动状态。好的,现在让我们删除 example-bar.service 单元。观察单位如何处于未找到状态;但是,example-bar.service 损坏的符号链接仍在 /etc/system/system/multi-user.target.wants
删除损坏的符号链接并确认 example-bar.service 单元已消失。
似乎 systemd 维护链接,但在您删除单元文件时不知道如何处理它们。
您可以尝试手动删除它们
/etc/systemd/system/suspend.target.wants/
,但当然systemctl reset-failed
从以前的答案听起来是一个更好的选择。