我使用的是 Red Hat 8.1 服务器。我想限制使用 cgroup 的用户。我不明白读取*.conf时的操作顺序。我目前有这些文件:
[root@log01 ~]# cat /etc/systemd/system/user-.slice.d/cpu.conf
[Slice]
CPUQuota=80%
[root@log01 ~]# cat /etc/systemd/system/user-123.slice.d/cpu.conf
[Slice]
CPUQuota=50%
[root@log01 ~]# cat /etc/systemd/system/user-123.slice.d/memory.conf
[Slice]
MemoryMax=4G
[root@log01 ~]# cat /etc/systemd/system/user-0.slice.d/cpu.conf
[Slice]
CPUQuota=3200%
根据我对文档的理解,user-.slice.d
是为所有用户设置的。
我使用user-123.slice.d
和user-0.slice.d
来覆盖 中的设置user-.slice.d
。
问题:
- 这里的操作顺序是怎样的?
user-.slice.d
总是先于别人阅读吗? - 读取conf文件的操作顺序是什么
user-123.slice.d
?是cpu.conf
在之前还是之后阅读memory.conf
?看起来你可以任意命名你的*.conf
文件。
答案1
来自 systemd 单元手册页:https://www.freedesktop.org/software/systemd/man/systemd.unit.html, 这部分:
除了单元文件之外,还可能存在
foo.service
“插入”目录。foo.service.d/
此目录中带有后缀“.conf”的所有文件将按字母数字顺序合并,并在解析主单元文件本身后进行解析。这对于更改或添加单元的配置设置非常有用,而无需修改单元文件。每个嵌入式文件必须包含适当的节标题。对于实例化单元,此逻辑将首先查找实例“.d/”子目录(例如“[电子邮件受保护]/”)并读取其“.conf”文件,然后是模板“.d/”子目录(例如“[电子邮件受保护]/”)和那里的“.conf”文件。此外,对于包含破折号(“-”)的单元名称,也会搜索通过重复截断所有破折号后的单元名称而生成的目录集。具体来说,foo-bar-baz.service
不仅对于单元名称不仅会搜索常规的 drop-in 目录foo-bar-baz.service.d/
,而且还会搜索foo-bar-.service.d/
和foo-.service.d/
。这对于为一组相关单元定义公共 drop-ins 很有用,这些单元的名称以公共前缀开头。此方案对于 mount、automount 和 slice 单元特别有用。其系统命名结构是围绕破折号作为组件分隔符构建的,请注意,前缀层次结构中更下方的同名插入文件会覆盖更上方的文件,即foo-bar-.service.d/10-override.conf
overridesfoo-.service.d/10-override.conf
。
答案2
根据我当地的红帽专家的说法,事实证明,限制用户组最好使用ulimit
. cgroups
是用于限制单个处理器或单个用户的工具。
根据我的专家的说法,我上面的配置的行为符合我的要求。届时将为所有用户设置限制user-slice.d/
(正如爱德华的建议)回答),然后搜索破折号后面的 UID。
因此,中的设置user-0.slice.d
实际上会覆盖user-.slice.d
仅针对 UID=0(即 root)的用户设置的设置。