AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1348031
Accepted
yaobin
yaobin
Asked: 2021-06-25 15:27:14 +0800 CST2021-06-25 15:27:14 +0800 CST 2021-06-25 15:27:14 +0800 CST

重新启动后,`kernel.core_pattern` 在我的 Ubuntu 18.04 VM 上无效

  • 772

测试环境

我使用ubuntu/bionic64Vagrant 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这可能意味着默认情况下不会读取这些系统设置。

18.04
  • 1 1 个回答
  • 755 Views

1 个回答

  • Voted
  1. Best Answer
    yaobin
    2021-06-26T14:24:46+08:002021-06-26T14:24:46+08:00

    经过进一步调查,我发现在系统启动时kernel.core_pattern被包覆盖。apport

    apport当我看到字符串“/usr/share/apport/apport”时,我应该考虑检查一下。我不确定是否apport真的会覆盖kernel.core_pattern,所以我决定看看它的源代码。

    通过运行apt-cache policy apport,我发现我使用的版本是2.20.9-0ubuntu7.24:

    vagrant@ubuntu-bionic:~$ apt-cache policy apport
    apport:
      Installed: 2.20.9-0ubuntu7.24
      Candidate: 2.20.9-0ubuntu7.24
      Version table:
     *** 2.20.9-0ubuntu7.24 500
            500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
            500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
            100 /var/lib/dpkg/status
         2.20.9-0ubuntu7 500
            500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
    vagrant@ubuntu-bionic:~$
    

    然后在apportLaunchPad页面上,我找到了它的下载链接:apport_2.20.9-0ubuntu7.tar.gz。

    在源代码中搜索,我发现该文件debian/apport.init有以下内容:

    do_start()
    {
        ...
        ...
        echo "|$AGENT %p %s %c %d %P" > /proc/sys/kernel/core_pattern
        echo 2 > /proc/sys/fs/suid_dumpable
    }
    

    所以我dpkg -L apport在我的虚拟机上运行,​​看看是否有这个文件:

    vagrant@ubuntu-bionic:~$ dpkg -L apport | grep init
    /etc/init.d
    /etc/init.d/apport
    

    没有任何文件具有完全匹配的文件名,但我决定查看/etc/init.d/apport并发现这是我要查找的文件:

    do_start()
    {
            ...
            ...
            echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
            echo 2 > /proc/sys/fs/suid_dumpable
    }
    

    我知道它/etc/sysctl.conf是由服务读取的systemd-sysctl,所以接下来我要确定的是之前是否systemd-sysctl启动过apport。

    我搜索了是否有任何apport相关服务并找到了一个:

    vagrant@ubuntu-bionic:~$ systemctl list-units | grep apport
    apport.service                                                                      loaded active exited    LSB: automatic crash report generation
    

    然后我检查了它们的相互依赖关系,发现apport.service是在以下之后开始的systemd-sysctl.service:

    vagrant@ubuntu-bionic:~$ systemctl list-dependencies apport.service
    apport.service
    ● ├─system.slice
    ● └─sysinit.target
    ...
    ●   ├─systemd-sysctl.service
    ...
    ...
    vagrant@ubuntu-bionic:~$
    

    这意味着systemd-sysctl.service正确读取我的 in 设置,kernel.core_pattern但/etc/sysctl.conf该设置随后立即被apport.service.

    为了验证这一点,我在中添加了两行/etc/init.d/apport:

    do_start()
    {
            ...
            ...
            # NOTE(ywen): Write the current value to a file.
            sysctl kernel.core_pattern > /home/vagrant/sysctl.kernel.core_pattern.txt
    
            echo "|$AGENT %p %s %c %d %P %E" > /proc/sys/kernel/core_pattern
            echo 2 > /proc/sys/fs/suid_dumpable
    
            # NOTE(ywen): Append the current value to the file.
            sysctl kernel.core_pattern >> /home/vagrant/sysctl.kernel.core_pattern.txt
    }
    

    然后我重新启动了虚拟机。当VM再次启动时,我发现该文件/home/vagrant/sysctl.kernel.core_pattern.txt具有以下内容:

    vagrant@ubuntu-bionic:~$ cat sysctl.kernel.core_pattern.txt 
    kernel.core_pattern = /var/tmp/core.%h.%e.%t
    kernel.core_pattern = |/usr/share/apport/apport %p %s %c %d %P %E
    vagrant@ubuntu-bionic:~$
    

    因此,确实,我的设置被正确读取,但随后被apport.

    • 1

相关问题

  • Ubuntu 16.10 及更高版本中的 Nautilus 功能“创建链接”发生了什么变化?

  • 使用标准接口(使用 mimetype)以编程方式修改文件关联

  • 我可以从 Evince 拖放到 Thunderbird 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve