sysctl.conf 是最后一场比赛吗?

sysctl.conf 是最后一场比赛吗?

sysctl.conf在哪里可以找到基于最后一场比赛的官方文档?

因此,该文件中有两个条目/etc/sysctl.conf

vm.swappiness=10
vm.swappiness=11

哪个会赢?最后一个?如果目录中有文件会怎样/etc/sysctl.d

答案1

我认为没有任何这样的官方文档。sysctl条目由以下人员处理procps和系统;但这两个项目的文档都说明了如何在同一配置文件中处理条目。

简而言之,sysctl.conf即使存在其他文件(在其中/etc/sysctl.d或其他地方),无论使用哪个系统加载设置,最后一个条目都会获胜。

procps

要了解如何procps处理条目,我们需要看看的源代码sysctl。这表明后面的条目是在不知道前面的条目的情况下进行处理的,因此最后一个条目获胜(查看该Preload函数)。当在命令行上给出多个配置文件时,这些配置文件将按顺序处理,如中所述手册页:

使用此选项意味着参数sysctl是文件,这些文件按照指定的顺序读取。

该选项的情况变得有点复杂--system,但至少有记录:

从所有系统配置文件加载设置。按照从上到下的给定顺序从以下列表中的目录中读取文件。一旦加载了给定文件名的文件,后续目录中的任何同名文件都将被忽略。

  • /run/sysctl.d/*.conf
  • /etc/sysctl.d/*.conf
  • /usr/local/lib/sysctl.d/*.conf
  • /usr/lib/sysctl.d/*.conf
  • /lib/sysctl.d/*.conf
  • /etc/sysctl.conf

该文档不太完整。如上所述,给定文件中的条目按顺序应用,并覆盖先前为相同设置指定的任何值。此外,查看该PreloadSystem函数表明文件是按名称顺序处理的,并且/etc/sysctl.conf是无条件处理的(IE较早目录中的同名文件不会覆盖它)。

系统

systemd 有自己的sysctl处理程序,记录在sysctl.d帮助页;其中有一个关于优先级的部分:

配置文件按优先顺序从/etc//run/、 和中的目录读取。/usr/lib/这些配置目录中的每个配置文件的命名格式为filename.conf。中的文件会覆盖和/etc/中同名的文件。中的文件会覆盖./run//usr/lib//run//usr/lib/

[...] 所有配置文件都按文件名按字典顺序排序,无论它们位于哪个目录。如果多个文件指定相同的选项,则文件中具有按字典顺序最新名称的条目将优先。建议在所有文件名前添加两位数字和破折号作为前缀,以简化文件的排序。

再次,单个配置文件中的后续条目将覆盖先前的条目。

答案2

以更实际的方式进行此断言:

sysctl首先要做的事情是:如果您将单词作为前缀,则值将不会应用sysctl.conf(“联机帮助页是哈哈“正如你所说,但你似乎没有认真阅读它们)。并且,测试这一点是一项简单的任务:将以下内容放在你的末尾/etc/sysctl.conf

vm.swappiness = 60
vm.swappiness = 61

我在这里使用 swappines 是因为我知道这是一个低影响的 sysctl,它会根据您的系统负载而产生很小的差异值(大多数发行版上的默认值为 60)。通过键入仅应用此文件sysctl -p /etc/sysctl.conf(联机帮助页)。仔细检查该值sysctl -a

root@host:~# sysctl -a | grep "vm.swappiness"
vm.swappiness = 61

瞧。

现在您知道文件是通过自上而下的方法读取的,这只是读取的问题sysctl.d联机帮助页可了解在系统中传播 sysctl 文件的优先级。正如 @Stephen Kitt 答案已经解释的那样,我不会在这里重复此信息。

另外,此sysctl.d目录的优先级将取决于您使用的发行版是否基于 systemd...

答案3

如果将来有人发现这个,并且你的系统没有 procps(RHEL、CentOS 等),你会发现“systemctl --system”和“systemd-sysctl.service”以不同的顺序应用目录,因此请注意按文件名覆盖的文件顺序。对于 sysctl 覆盖,将应用最后读取的值,因此文件名的顺序目录的顺序很重要。

相关内容