我们在文件中设置以下内核参数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
以上是正确的方法吗?
答案1
如果该目录/etc/sysctl.d/
作为标准存在于您的 Linux 发行版中,那么很可能它已经有一个启动脚本或 systemd 单元,其功能相当于:
for i in /etc/sysctl.d/*.conf
do
sysctl -p "$i"
done
换句话说,很可能已经有一个脚本或其他一些功能用于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 之后,您可能需要向发行版的维护人员发送有关 drop 的不完整实现的错误/etc/sysctl.d/*.conf
报告-in 目录模式。