sysctl 改完不生效的三种情况
改了 /etc/sysctl.conf,sysctl -p 也跑了,sysctl net.ipv4.ip_forward 还是 0。
一,配置文件没被读。/etc/sysctl.conf 在 systemd 系统上可能只是兼容层,真正生效的是 /etc/sysctl.d/*.conf,按文件名排序,后面的覆盖前面的。
二,被更高优先级的文件覆盖。/run/sysctl.d/ 优先级高于 /etc/sysctl.d/,容器运行时或者云初始化脚本可能在那里写值。
三,参数根本不存在。sysctl -w 会报错,但配置文件里的错误只会在启动时进日志,sysctl -p 也可能静默跳过。
验证顺序:sysctl --system 重新加载全部,然后 sysctl <key> 确认;不生效就 grep -r <key> /etc/sysctl.d /run/sysctl.d /usr/lib/sysctl.d 找出谁覆盖了。