代码之家  ›  专栏  ›  技术社区  ›  istudy0

如何在centos中为守护进程生成核心转储?

  •  3
  • istudy0  · 技术社区  · 14 年前

    我有一些守护进程偶尔崩溃,我想知道如何启用核心转储生成。 我知道在linux上,内核转储的ulimit默认值为零,所以如果我想查看正在运行的进程的内核转储,我需要将其设置为unlimited。 但我想做的是为在根帐户下运行的守护进程生成核心转储。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Michael Goldshteyn    14 年前

    我相信像这样的事情:

    ulimit -c unlimited
    

    ... 或者某个值将允许您创建这些转储。此外,您可能希望查看以下网页以了解更多详细信息: how to enable core Linux FAQ

        2
  •  3
  •   harmic    10 年前

    对于RHEL派生的系统,大多数守护进程都有一个init脚本,该脚本可以生成一个名为:

    /etc/sysconfig/{daemon_name}
    

    例如,对于apache,它是:

    /etc/sysconfig/httpd
    

    这些文件中的环境变量在后台程序启动期间由init脚本读取,这些变量用于配置后台程序运行的环境。

    要启用核心转储,请添加以下行:

    export DAEMON_COREFILE_LIMIT='unlimited'
    

    编辑此文件后重新启动守护程序。

    您可能需要做的另一件事是更改内核核心转储文件名模板。默认情况下,核心转储将在当前工作目录中生成,名称为“core”。这不是很有用,因为它们会互相覆盖,而且在守护进程的情况下,它的工作目录可能是(a)未知的(b)不可写的。要更改它:

    sysctl -w kernel.core_pattern=/tmp/core_%e_%p
    

    这个设置是我的建议,您可以更改正在使用的目录的路径和模式。上面的模式将包含可执行文件名和pid。

    /etc/sysctl.conf 并插入:

    kernel.core_pattern=/tmp/core_%e_%p