systemctl
的输出中列为错误。彻底删除它们吗?#1 楼
我消除服务的秘诀(请小心使用rm
语句!)systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] # and symlinks that might be related
rm /usr/lib/systemd/system/[servicename]
rm /usr/lib/systemd/system/[servicename] # and symlinks that might be related
systemctl daemon-reload
systemctl reset-failed
系统化服务可能会“包装” / etc / init中的旧样式脚本.d,因此您可能也想清理它,但这不是systemd服务所在的地方。
#2 楼
您可能正在寻找reset-failed
:$ sudo systemctl reset-failed
$
从系统手册页:
reset-failed [PATTERN...]
重置指定单元的“失败”状态,或者如果未传递任何单元名称
,则重置所有单元的状态。当某个单元以某种方式发生故障(例如,进程以非零错误代码退出,异常终止或超时)时,它将自动进入“失败”状态及其退出代码并记录状态,以供管理员
自省,直到使用此
命令重新启动或重置服务为止。
评论
这根本不是问题所要的。为什么这在世界上被反对了17次?
–psusi
18年7月7日在16:54
这是唯一正确的答案。解决方法是其他带有更多投票和复选标记的选项。
–托马斯
18年11月21日在11:37
我尚未阅读OP的问题,但这是我一直在寻找的答案。
–库辛可卡因
19-09-3在8:41
这正是我所需要的。该服务显然已被删除,但是失败状态仍然存在。
–杰克·贝尼姆布尔
20年6月19日在17:21
#3 楼
听起来像是您卸载了它,但没有删除systemd钩子:# systemctl disable [servicename]
#4 楼
添加到@ mark-lakata的答案并牢记rm
命令所需的关注度。 [chkconfig]
可以简化此过程!(单击此处以了解chkconfig)要重新列出命令列表:
systemctl stop [servicename]
chkconfig [servicename] off
或对于较新的系统systemctl disable [servicename]
systemctl daemon-reload
systemctl reset-failed
注意:
根据是否要保持服务运行,第一条命令是可选的是否在当前会话中使用(对于此问题,应使用该命令)。
第二个命令负责禁用和删除(遵循符号链接)服务。
评论
chkconfig是用于启用/禁用SysVinit服务的原始命令。在使用systemd的系统中,它可能作为向后兼容性命令出现;但是原生的systemctl命令非常简单:systemctl disable [servicename]
–telcoM
18年7月29日在13:29
好的,但是我使用此命令的原因是,您不必显式运行rm命令。
– GarlicFrancium
18年7月29日在19:23
在ubuntu 16中找不到chkconfig
– Nam G VU
19年11月14日在10:26
@NamGVU更新了我的答案
– GarlicFrancium
20 Mar 15 '20在15:08
#5 楼
从systemd删除服务:Systemd使用单元(文件定义服务)来删除必须删除的服务...这是单元位置的列表:
/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仍可以列出幽灵(未找到)服务
单元仍存在于systemd目录之一中
单元未退出,但文件链接仍存在于systemd目录之一中
该服务在其他单元中使用*
(*)如果某个服务在其他单元中被提及但不存在,则systemd仍会以未找到状态列出该服务,即使没有单元文件也可以...您可以搜索哪个单元正在使用该服务文本搜索并编辑这些单元(如果以后打算安装该服务,则不建议使用)
来源:Linuxhacks.org
公开信息:我是Linuxhacks.org的所有者
#6 楼
一个简单的Oneliner可能是: service=YOUR_SERVICE_NAME; systemctl stop $service && systemctl disable $service && rm /etc/systemd/system/$service && systemctl daemon-reload && systemctl reset-failed
将
service
设置为您想要删除的服务。例如。 service=gunicorn.service
评论
+1为一次操作。可以使用服务字符串作为参数轻松地在脚本中进行设置,从而简化了过程。
–本
20/12/3在15:38
#7 楼
删除服务及其覆盖文件的最佳和官方方法是:systemctl revert servicename
这将删除使用以下命令创建的所有内容:
systemctl edit
systemctl set-property
systemctl mask
,它将把给定的设备恢复为其供应商配置
评论
请注意,存储Systemd单元文件有多个位置,尤其是/ usr / lib / systemd / system以及/ etc / systemd / system /。有关参考,请访问:access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/…
–马克·爱丁顿
17 Mar 8 '17 at 0:18
我还必须在运行systemctl reset-failed之前删除/etc/init.d/[servicename]
– Andrea
17年7月7日在15:21
是的,我在删除单位文件之前忘了禁用它。顺便说一句,要找到要删除的所有单位文件,我检查了systemctl cat [servicename]的输出。
–阿米尔
17年9月17日下午14:55
很好,谢谢,但是我不确定为什么要手动清理此垃圾。
–罗夫
18-3-31在1:19
@MarkLakata为什么我们最终需要进行systemctl重置失败?
–tuk
20-05-19在4:14