如何删除缺少的systemd单元?


40

我在弄清楚如何删除不再具有文件的systemd单元时遇到了麻烦。他们似乎仍然以某种方式徘徊在系统中。

我要删除的旧的损坏的单元:

core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

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 firehose-router@02.service
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> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

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 disable它们,它会失败,对吗?
dawud

2
它只存在0。没有要禁用的内容(它已经丢失/已禁用)。
Andy Shinn 2014年

我尝试了此处(以及到目前为止)所建议的所有解决方案,然后重新启动,但没有任何效果。我尝试删除的单元曾经安装或尝试安装,然后后来被清除。因此,很显然,apt purge不会删除为systemd提供的配置。对于这些“找不到”的单元是否会引起任何问题,我仍然不清楚。
椭圆视图

我怀疑我也许可以删除/ var / lib / systemd / deb-systemd-helper-enabled /中的文件,但不确定是否要弄乱它。我在那里似乎有两个已知的死角:mariadb.service.dsh-also和mysql.service.dsh-also
椭圆视图

@Elipticalview对这些文件进行备份,以防万一,然后将其删除?
gf_

Answers:


74

您要执行的命令是 systemctl reset-failed


3
谢谢!我不知道为什么这对我来说并不那么明显...
Andy Shinn 2014年

5
这最终可以清除“真实”服务,但是我有一个别名服务,它拒绝消失。我想disabledaemon-reloadreset-failed而别名服务为出现not-found inactive dead始终。我还在磁盘上搜索了与服务名称匹配的任何内容,但没有结果。
Mark Lakata

3
我只是碰到这个systemctl stop <service>为我工作。
mpontillo

计时器也是如此-必须先将其停止reset-failed才能清理计时器。
rustyx

有点对我有用,但我不得不掩盖然后再为其中一个掩盖。同样,必须停止一个然后屏蔽并取消屏蔽,此后复位失败最终消除了所有故障。
tgunr

2

当systemd分析单元定义文件时,它会记录文件中被调出的任何其他相关单元-这些其他单元是否存在。

$ systemctl --state=not-found --all
> ( ...prints list of 'not-found' units )

$ grep -r "<missing-unit>" /usr/lib/systemd/system
> ( returns files with references to <missing-unit> )

当单元显示为“未找到”时,不一定是错误-我们所知道的是,本地单元定义声称与它有某种关系。这种关系可能不是我们关心的关系。例如,它可能是"Before:"其他单位,但我们不使用该其他单位。


0

似乎systemd维护链接,但在删除单位文件时不知道如何处理它们。

您可以尝试手动删除它们/etc/systemd/system/suspend.target.wants/,但当然systemctl reset-failed从上一个答案中听起来像是一个更好的选择。

$ cd /etc/systemd/system
$ sudo mv lock.service /tmp 
$ sudo systemctl disable lock.service
Failed to disable unit: No such file or directory
$ sudo mv /tmp/lock.service .
$ sudo systemctl disable lock.service
Removed /etc/systemd/system/suspend.target.wants/lock.service.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.