layout: post title: 清除无service文件的unit tags:

  • LinuxOps categories: linuxOps description: 清除无service文件的unit —

如果systemctl list-units --all仍然列出了已经删除.service文件的unit(且LOAD=not-found),说明systemd仍然缓存了该unit,但找不到对应的文件。

如下记录一下如何清理此种unit。

清除无.service文件的unit

  1. 运行systemctl reset-failed

     # sudo systemctl reset-failed
    

    适用于:如果 unit处于FAILED 状态,这个命令会清除 systemd 的记录,使systemctl list-units不再显示它

  2. 运行systemctl daemon-reload

    如果 reset-failed 仍然无法移除,尝试重新加载 systemd:

     # sudo systemctl daemon-reload
    

    适用于:.service 文件已删除,但 systemd 仍然保留了它的缓存

  3. 手动删除unit残留

    如果 unit 仍然在 list-units 里,检查 systemd 是否有残留的 unit 配置:

     # ls -l /etc/systemd/system/ | grep <unit_name>
     # ls -l /usr/lib/systemd/system/ | grep <unit_name>
     # ls -l /run/systemd/system/ | grep <unit_name>
    

    如果找到类似 xxx.service 的文件或软链接,可以手动删除:

     # sudo rm -f /etc/systemd/system/<unit_name>.service
     # sudo systemctl daemon-reload
    
  4. 彻底禁用并移除 unit

    如果systemctl disable <unit> 仍然显示 unit 存在,尝试:

     # sudo systemctl disable --now <unit_name>
     # sudo rm -f /etc/systemd/system/<unit_name>.service
     # sudo systemctl daemon-reload
    

    然后检查:

     # systemctl list-units --all | grep <unit_name>
    
  5. 直接强制删除 symlink

    如果 disable 无效,手动清除 unit 的 symlink:

     # sudo find /etc/systemd/system/ -name "*<unit_name>*" -delete
     # sudo systemctl daemon-reload