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

发布于 2024-09-27 16:22:02 字数 153 浏览 7 评论 0原文

我有一些守护进程时不时地崩溃,我想知道如何启用核心转储生成。 我知道默认情况下,Linux 上核心转储的 ulimit 为零,因此如果我想查看正在运行的进程的核心转储,我需要将其设置为无限制。 但我想做的是为在 root 帐户下运行的守护进程生成核心转储。 谁能告诉我如何配置系统?先感谢您。

I have some daemon processes that crashes every now and then and I want to know how I can enable core dump generations.
I know that by default on linux ulimit for core dumps is zero so I need to set it to unlimited if I want to see core dumps for processes that I am running.
But what I want to do is to generate core dumps for daemon processes that are running under root account.
Can anyone advise me how to configure the system? Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江湖正好 2024-10-04 16:22:02

我知道,这是一个多年以前的问题,但我在谷歌搜索中发现了这个问题,并且接受的答案是不完整的(至少对于 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

I know, it's a years-old question, but it came up for me on a google search and the accepted answer is incomplete (for Centos at least).

For RHEL derived systems, most daemons have an init script which sources a file called:

/etc/sysconfig/{daemon_name}

For example, for apache it is:

/etc/sysconfig/httpd

Environment variables within these files are read by the init script during daemon startup, and these variables are used to configure the environment in which the daemon is running.

To enable core dumps, add the following line:

export DAEMON_COREFILE_LIMIT='unlimited'

Restart the daemon after editing this file.

The other thing you may need to do is change the kernel core dump filename template. By default, core dumps will be produced in the current working directory and have the name 'core'. This is not so useful since they will overwrite one another, and also in the case of a daemon it's working directory may be (a) unknown (b) not writable. To change it:

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

That setting is my recommendation, you can alter both the path to the directory being used and also the pattern. The above pattern will contain the executable name and pid.

To set it more permanently, edit the file /etc/sysctl.conf and insert:

kernel.core_pattern=/tmp/core_%e_%p
浊酒尽余欢 2024-10-04 16:22:02

我相信类似的东西:

ulimit -c unlimited

...或某些值将允许您创建这些转储。另外,您可能需要查看以下网页以了解更多详细信息:如何启用核心Linux 常见问题< /a>

I believe something like:

ulimit -c unlimited

... or some value will allow what you to create those dumps. Also, you may want to check out the following web pages for more details: how to enable core and Linux FAQ

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文