了解 /etc/systemd/system/* 中 cgroup 配置文件的操作顺序

了解 /etc/systemd/system/* 中 cgroup 配置文件的操作顺序

我使用的是 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.duser-0.slice.d来覆盖 中的设置user-.slice.d

问题:

  1. 这里的操作顺序是怎样的?user-.slice.d总是先于别人阅读吗?
  2. 读取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.confoverrides foo-.service.d/10-override.conf

答案2

根据我当地的红帽专家的说法,事实证明,限制用户组最好使用ulimit. cgroups是用于限制单个处理器或单个用户的工具。

根据我的专家的说法,我上面的配置的行为符合我的要求。届时将为所有用户设置限制user-slice.d/(正如爱德华的建议)回答),然后搜索破折号后面的 UID。

因此,中的设置user-0.slice.d实际上会覆盖user-.slice.d仅针对 UID=0(即 root)的用户设置的设置。

相关内容