我们在文件中设置以下内核参数99-custom.conf
more /etc/sysctl.d/99-custom.conf
net.ipv4.tcp_low_latency = 1
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 5
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 2
net.ipv4.tcp_mtu_probing = 1
为了即时设置,我们可以使用上面的参数sysctl -p /etc/sysctl.d/99-custom.conf
但当然重启后这些值就会消失。
所以,解决这个问题的一种方法是在/etc/rc.local
作为
more /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run chmod +x /etc/rc.d/rc.local to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
sysctl -p /etc/sysctl.d/99-custom.conf
以上是正确的方法吗?
如果该目录
/etc/sysctl.d/
作为标准目录存在于您的 Linux 发行版中,那么它很可能已经具有一个启动脚本或 systemd 单元,其功能相当于:换句话说,很可能已经有一个脚本或一些其他功能用于
sysctl -p
读取目录*.conf
中的所有文件/etc/sysctl.d/
。但它可能会在引导过程的早期发生,此时系统仍在从 initramfs 运行,因此您可能需要在将任何文件添加到/etc/sysctl.d/
. 检查您的发行版文档以了解如何执行此操作;确切的命令因发行版而异。但是如果你自己创建了
/etc/sysctl.d/
目录,那么系统就不会自动为你读取文件。如果您只关心一个文件,那么您所做的方式现在肯定可以完成工作。/etc/sysctl.d/99-custom.conf
/etc/rc.local
但是,您可能正在为自己制造陷阱。
随着 Ansible 和 Salt 等系统管理自动化解决方案变得越来越普遍,用相应的目录替换(或扩充)单个配置文件(如 )已成为一种常见模式,您可以将任意数量的
/etc/<something>.conf
部分配置文件放入其中:例如/etc/<something>.d/*.conf
. 通常,当创建这样一个目录时,读取该配置的系统会被修改为读取该目录中与模式匹配的所有配置文件(因此自动避免任何编辑器备份文件等)。这有时称为插入目录,因为您可以将配置片段放入其中并运行命令以重新加载配置/重新启动有问题的服务。这可以使自动化配置管理变得非常容易。如果您创建自己的
/etc/sysctl.d/
目录但只配置/etc/rc.local
为只读取一个目录/etc/sysctl.d/99-custom.conf
,您可能会忘记这一事实。然后,某天,需要添加一些新的 sysctl 设置,你或你的一位同事看到/etc/sysctl.d/
,想“啊,它有新的目录方案,所以我可以将我的新设置添加到/etc/sysctl.d/98-more-custom.conf
我完成了”...然后在重新启动后忽略新设置时会感到非常惊讶。因此,如果您实际创建了该
/etc/sysctl.d/
目录,我建议您将此答案开头的sysctl -p /etc/sysctl.d/99-custom.conf
单行替换/etc/rc.local
为四行。这样,/etc/sysctl.d/
即使*.conf
向其中添加了更多文件,您的目录也会按预期工作。如果
/etc/sysctl.d/
由操作系统安装程序创建为标准,但*.conf
其中的文件不会在引导时使用,即使在重建 initramfs 之后,您可能希望向发行版的维护者发送有关删除的不完整实施的错误/etc/sysctl.d/*.conf
报告-in 目录模式。