我有一些守护进程偶尔会崩溃,我想知道如何启用核心转储代。 我知道默认情况下linux ulimit的核心转储是零,所以如果我想查看正在运行的进程的核心转储,我需要将其设置为无限制。 但我想要做的是为在root帐户下运行的守护程序进程生成核心转储。 任何人都可以建议我如何配置系统?提前谢谢。
答案 0 :(得分:3)
我知道,这是一个多年前的问题,但它在谷歌搜索中找到了我,并且接受的答案是不完整的(至少对Centos而言)。
对于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
答案 1 :(得分:1)