彻底卸载systemd服务需五步:先查状态与依赖,再停止并禁用服务,接着删除/etc/和/usr/lib/下的单元文件,然后daemon-reload验证消失,最后清理日志、配置目录及用户级服务。

完全卸载并清理一个 systemd 服务,不只是删掉 `.service` 文件那么简单。它涉及停止运行、解除开机自启、删除配置文件、重载管理器、清理日志与残留依赖,缺一不可。操作不当容易留下“幽灵服务”——看似删了,重启后又报错或自动复活。
确认服务状态和依赖关系
先别急着删,看清它到底在不在跑、被谁用着:
- 查当前状态:
sudo systemctl status 服务名.service(含 .service 后缀) - 看是否开机自启:
sudo systemctl is-enabled 服务名.service - 查哪些服务依赖它:
sudo systemctl list-dependencies --reverse 服务名.service - 查它自己依赖什么:
sudo systemctl list-dependencies 服务名.service - 搜所有相关单元(可能还有 .socket/.timer/.target):
systemctl list-unit-files | grep -i 服务名
停止、禁用并卸载服务单元
这是核心三步,顺序不能乱:
- 停止正在运行的服务(含关联 socket/timer):
sudo systemctl stop 服务名.{service,socket,timer} - 禁用开机自启(移除软链接):
sudo systemctl disable 服务名.{service,socket,timer} - 删除单元文件本身:检查它在哪个目录,常见位置有:
/etc/systemd/system/服务名.*(本地自定义)/usr/lib/systemd/system/服务名.*(包管理器安装)
找到后执行:sudo rm -f /etc/systemd/system/服务名.* /usr/lib/systemd/system/服务名.*
重载配置并验证清理效果
删完不重载,systemd 还记着旧文件:
- 刷新配置缓存:
sudo systemctl daemon-reload - 确认服务已“消失”:
systemctl list-unit-files | grep -i 服务名应无输出 - 确认状态查询返回“not found”:
systemctl status 服务名.service - 检查是否还有残留进程:
ps aux | grep 服务名或pgrep -f 服务名
手动清理残留项
很多服务还会留下额外痕迹,需人工扫一遍:
-
日志:清除 journal 日志条目:
sudo journalctl --vacuum-size=100M(或按服务过滤清理:sudo journalctl -u 服务名.service --rotate --vacuum-time=1s) -
配置与数据目录:常见路径如
/etc/服务名/、/var/lib/服务名/、/var/log/服务名/,确认无其他程序使用后可sudo rm -rf -
用户级服务:如果是用户服务(
--user),要切到对应用户执行:systemctl --user stop/disable 服务名.service,再删~/.config/systemd/user/下对应文件 -
包管理器残留:若服务由 apt/dnf/yum/pacman 安装,建议同步卸载主包(如
sudo apt purge 包名),避免下次更新时冲突











