测试环境
我使用ubuntu/bionic64
Vagrant box作为我的测试环境。
前置条件
创建VM后,我只是ansible 2.9.23
按照官方文档中的说明进行安装。
我还安装了ansible.posix
集合 ( ansible-galaxy collection install ansible.posix
),因为我想使用该模块ansible.posix.sysctl
。
验证当前的核心模式不是我想要的:
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
此外,/etc/sysctl.conf
没有核心模式:
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
vagrant@ubuntu-bionic:~$
我的意图
我想将核心模式更改为/var/tmp/core.%h.%e.%t
.
我做了什么
我运行了以下ansible
命令:
ansible -bKvvv -m "sysctl" -a "name=kernel.core_pattern state=present value='/var/tmp/core.%h.%e.%t' reload=yes" localhost
并成功输出:
localhost | CHANGED => {
"changed": true,
"invocation": {
"module_args": {
"ignoreerrors": false,
"name": "kernel.core_pattern",
"reload": true,
"state": "present",
"sysctl_file": "/etc/sysctl.conf",
"sysctl_set": false,
"value": "/var/tmp/core.%h.%e.%t"
}
}
}
我还检查了当前配置:
vagrant@ubuntu-bionic:/etc$ sysctl kernel.core_pattern
kernel.core_pattern = /var/tmp/core.%h.%e.%t
我还确认core_pattern
已写入/etc/sysctl.conf
:
vagrant@ubuntu-bionic:~$ grep "core_pattern" /etc/sysctl.conf
kernel.core_pattern=/var/tmp/core.%h.%e.%t
然后我重新启动了我的虚拟机。重启后,当前生效的core_pattern
被回滚:
vagrant@ubuntu-bionic:~$ sysctl kernel.core_pattern
kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
我的想法和我的尝试
这个问题似乎不适用于我,因为首先,它是在大约 10 年前被问到的,其次,Ubuntu Server 18.04 似乎不再使用upstart
了。
我认为其他一些.conf
文件可能会晚于读取,/etc/sysctl.conf
因此设置在某处被覆盖。但是sysctl(8)
手册页列出了.conf
要读取的文件的顺序,看起来/etc/sysctl.conf
应该是最后一个覆盖其他所有文件的文件。
sysctl.conf(5)
手册页提供了与sysctl(8)
.
我也没有找到任何东西sysctl.d(5)
。事实上,它的“配置目录和优先级”部分证实了我的理解:
/etc/ 中的文件会覆盖 /run/ 和 /lib/ 中的同名文件。/run/ 中的文件会覆盖 /lib/ 中的同名文件。
我发现手动kernel.core_pattern
运行后会按预期设置。sudo sysctl --system
这可能意味着默认情况下不会读取这些系统设置。