如何删除系统服务


178

如果我安装了一个新的服务,然后决定我不希望再申请并删除它,该服务仍然在输出中列出的systemctl错误

这是哪里来的,我如何彻底将它们移除?

Answers:


288

我的服务遗忘秘方(请小心rm声明!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

systemd服务可能会“包装” /etc/init.d中的旧样式脚本,因此您可能也希望清除它们,但这不是 systemd服务所处的位置。


7
请注意,有多个位置存储Systemd单位文件,尤其是/usr/lib/systemd/system/etc/systemd/system/。仅供参考,请参阅:access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/...
马克·爱丁顿

6
我还必须/etc/init.d/[servicename]在跑步前移走systemctl reset-failed
Andrea

4
是的,我在删除单位文件之前忘记禁用它。顺便说一句,要找到要删除的所有单位文件,我检查的输出systemctl cat [servicename]
阿米尔(Amir)

它可能是/etc/init.d/中的“包装”旧样式脚本,但是如果您不删除它,则会发现它仍显示在删除后剩余的服务下。我可以告诉你我就是这种情况。您可以简单地将其添加到您的答案中以使其更加完整,但是希望下一个需要它的人可以查看评论。
马龙

1
很好,谢谢,但是我不确定为什么要手动清理此垃圾。
罗尔夫(Rolf)'18年

25

您可能正在寻找reset-failed

$ sudo systemctl reset-failed
$

从系统手册页:

reset-failed [PATTERN...]

重置指定单元的“失败”状态,或者如果未传递任何单元名称,则重置所有单元的状态。当某个单元以某种方式发生故障(即,进程以非零错误代码退出,异常终止或超时)时,它将自动进入“失败”状态,并记录退出代码和状态以供管理员进行自省,直到该服务使用此命令重新启动或重置。


2
这根本不是问题所要的。为什么这在世界上被反对了17次?
psusi

1
这是唯一正确的答案。解决方法是其他带有更多投票和复选标记的选项。
托马斯

1
我尚未阅读OP的问题,但这是一直在寻找的答案。
CousinCocaine

23

听起来像您已将其卸载,但并未删除systemd挂钩:

# systemctl disable [servicename]


4

添加到@ mark-lakata的答案,并牢记该rm命令所需的注意性。[chkconfig]可以简化过程!(单击此处以了解chkconfig

要重复命令列表:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

注意:根据您是否要在当前会话中保持服务运行,第一条命令是可选的(对于此问题,应使用该命令)。

第二个命令负责禁用和删除服务(遵循符号链接)。


1
chkconfig是启用/禁用SysVinit服务的原始命令。在使用的系统中systemd,它可能作为向后兼容命令出现;但是本地systemctl命令非常简单:systemctl disable [servicename]
telcoM

1
好的,但是我使用此命令的原因是,您不必显式地运行rm命令
大蒜Franccium18年

1

从systemd删除服务:

Systemd使用unit(文件定义服务)来删除必须删除的服务...这是单元位置的列表:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

刷新systemd:

systemctl daemon-reload
systemctl reset-failed

鬼服务(未找到):

即使由于多种原因删除了该单元,Systemd仍可以列出幻影(未找到)服务

  1. 单元仍然存在于systemd目录之一中
  2. 单元未退出,但文件链接仍然存在于systemd目录之一上
  3. 该服务已在其他单位中使用*

(*)如果某个服务在其他单元中被提及但不存在,那么即使没有单元文件,systemd仍会以未找到状态列出该服务...您可以通过文本搜索来搜索正在使用该服务的单元并编辑这些单元(如果以后打算安装该服务,则不建议使用)

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.