先说结论:这个报错不是你的服务写错了,而是你的系统里压根没有安装提供 cgconfig.service 的软件包,或者安装的版本太老、路径不对,导致 systemd 根本找不到这个单元文件。很多人在网上搜到老教程,照着执行 systemctl start cgconfig,结果直接栽在第一步。
如果你正卡在这个地方,别急。这篇文章我把整个问题的来龙去脉、排查链路、以及三种可落地的解决方案全部拆开讲清楚,顺便把我在实际环境中踩过的坑也一并交代了。无论是 CentOS 7、Ubuntu 20.04,还是新一点的 Rocke Linux 9,你都能在里面找到对应的处理思路。
1. 这个报错到底意味着什么——从"服务不存在"到"谁该提供这个服务"的认知转换
1.1 systemctl 说"could not be found"的真实含义
我们先抠一下报错本身的措辞。Unit cgconfig.service could not be found 这句话里有两个关键词:Unit 和 could not be found。在 systemd 的世界里,Unit 是对服务、挂载点、设备、套接字等资源的统一抽象,而 cgconfig.service 是一个典型的 service 类型单元。systemd 在启动这个单元之前,会按照固定的搜索路径去找对应的单元定义文件,也就是 .service 后缀的配置文件。
如果 systemd 在整个搜索路径里都没有找到 cgconfig.service 这个文件,它就会直接返回 could not be found。注意,它不会去管这个服务是不是真的有必要存在,也不会管你是不是刚从某个教程里复制来的命令——找不到就是找不到,零容忍。
这里有个很容易混淆的点:很多人把这个报错和 cgconfig.service failed to start、cgconfig.service start request repeated too quickly 这类报错混为一谈。后者是单元文件存在、但服务启动过程出错;前者是连单元文件都不存在。两个问题的处理方向完全不同。如果你看到的是 could not be found,那排查范围可以立刻收敛到"系统里有没有这个文件"以及"systemd 能不能找到这个文件"这两个点上。
1.2 谁应该负责提供 cgconfig.service
要回答这个问题,得先搞清楚 cgconfig 是什么。cgconfig 是 libcgroup 工具集里的一个组件,它的作用是在系统启动时按照配置文件 /etc/cgconfig.conf 来创建 cgroup 层级、设置子系统参数、分配资源限额。换言之,它是 cgroup v1 时代用来做"静态资源配置"的经典工具。
那么,谁负责把它打包成 systemd 能识别的服务单元?答案是发行版的软件包管理器。在 RHEL/CentOS 系列上,这个包叫 libcgroup-tools;在 Debian/Ubuntu 系列上,对应的包名是 libcgroup-tools(是的,名字也一样,但版本和行为有差异)。这个包安装之后,会在 /usr/lib/systemd/system/ 目录下放入 cgconfig.service 文件,同时在 /etc/init.d/ 下可能还保留一份 SysV 脚本。
所以,你的第一反应不应该是去手写服务文件,而是先问自己:libcgroup-tools 到底装了没有?如果装了,版本对不对?在实际环境中,我遇到的大部分 could not be found 都是因为装了这个包但 systemd 没能正确加载单元,或者压根没装。少部分情况是装了一个阉割版——某些容器镜像为了瘦身,只装了 libcgroup 运行库,没装 tools,自然也就没有 service 文件。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统里到底有没有这个单元文件——排查链路的第一步
2.1 用最直接的方式确认文件是否存在
不要一上来就改配置、写服务,先做三件事。这三件事的顺序很重要,能帮你快速定位问题层级。
第一件事,查看单元文件是否存在。执行下面的命令:
bash复制systemctl status cgconfig.service
如果输出还是 could not be found,继续执行:
bash复制find /usr/lib/systemd/system /etc/systemd/system -name "cgconfig*" 2>/dev/null
ls -l /usr/lib/systemd/system/cgconfig.service /etc/systemd/system/cgconfig.service 2>&1
如果 ls 直接报 No such file or directory,那就说明系统里压根没有这个单元文件。这时候你再执行第二件事——确认软件包的安装情况。
在 RHEL/CentOS 系上:
bash复制rpm -qa | grep libcgroup
rpm -qf /usr/lib/systemd/system/cgconfig.service
在 Debian/Ubuntu 系上:
bash复制dpkg -l | grep libcgrou
