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 覆盖,将应用最后读取的值,因此文件名的顺序和目录的顺序很重要。