系统管理指南:高级管理

管理核心转储文件概述

核心转储文件是在异常终止进程或应用程序时生成的。使用 coreadm 命令可以管理核心转储文件。

例如,可以使用 coreadm 命令来配置系统,以便将所有进程核心转储文件都放在一个系统目录中。这意味着,当进程或守护进程异常终止时,可通过检查特定目录中的核心转储文件来跟踪问题。

配置核心转储文件路径

可以独立启用或禁用的两个新的可配置 core 文件路径是:

当进程异常终止时,缺省情况下会在当前目录中生成一个核心转储文件。如果启用了全局核心转储文件,则每个异常终止的进程可能会生成两个文件,一个在当前工作目录中,另一个在全局核心转储文件位置。

缺省情况下,setuid 进程不使用全局或每进程路径生成核心转储文件。

扩展的核心转储文件名

如果启用了全局核心转储文件目录,则可使用下表中介绍的变量来区分 core 文件。

变量名 

变量定义 

%d

可执行文件目录名,最多包含 MAXPATHLEN 个字符

%f

可执行文件名,最多包含 MAXCOMLEN 个字符

%g

有效组 ID 

%m

机器名 (uname -m)

%n

系统节点名 (uname -n)

%p

进程 ID 

%t

时间的十进制值 (2) 

%u

有效用户 ID 

%z

在其中执行进程的区域的名称 (zonename)

%%

字面值 % 

例如,如果全局核心转储文件路径设置为:

/var/core/core.%f.%p

并且 PID 为 12345sendmail 进程异常终止,则会生成以下 core 文件:

/var/core/core.sendmail.12345

设置核心转储文件名称模式

可以按全局、区域或进程设置核心转储文件名称模式。此外,还可以设置在系统重新引导时持续存在的每进程缺省值。

例如,以下 coreadm 命令将设置缺省的每进程核心转储文件模式。此设置适用于未显式覆盖缺省核心转储文件模式的所有进程。此设置在系统重新引导后继续存在。


# coreadm -i /var/core/core.%f.%p

以下 coreadm 命令可为任何进程设置每进程核心转储文件名称模式:


$ coreadm -p /var/core/core.%f.%p $$

$$ 符号表示当前正在运行的 Shell 的进程 ID 的占位符。所有子进程都会继承每进程核心转储文件名称模式。

一旦设置了全局或每进程核心转储文件模式,就必须使用 coreadm -e 命令启用该模式。有关更多信息,请参见以下过程。

通过在 $HOME/.profile .login 文件中放置该命令,便可为用户登录会话期间运行的所有进程设置核心转储文件名称模式。

启用 setuid 程序以生成核心转储文件

可以使用 coreadm 命令启用或禁用 setuid 程序,以便通过设置以下路径来为所有系统进程或每个进程生成核心转储文件:

缺省情况下,这两个标志都被禁用。由于安全原因,全局核心转储文件路径必须为全路径名,以斜杠 / 开头。如果超级用户禁用每进程核心转储文件,则各个用户都无法获取核心转储文件。

setuid 核心转储文件只属于具有超级用户读/写权限的超级用户所有。即使生成 setuid 核心转储文件的进程属于普通用户所有,常规用户也不能访问这些文件。

有关更多信息,请参见 coreadm(1M) 手册页。

如何显示当前的核心转储配置

使用不带任何选项的 coreadm 命令可以显示当前的核心转储配置。


$ coreadm
               global core file pattern: 
     global core file content: default
       init core file pattern: core
       init core file content: default
            global core dumps: disabled
       per-process core dumps: enabled
      global setid core dumps: disabled
 per-process setid core dumps: disabled
     global core dump logging: disabled

Procedure如何设置核心转储文件名称模式

  1. 确定要设置每进程核心转储文件还是全局核心转储文件,并选择下列项之一:

    1. 设置每进程文件名称模式。


      $ coreadm -p $HOME/corefiles/%f.%p $$
      
    2. 成为超级用户或同等角色。

      角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

    3. 设置全局文件名称模式。


      # coreadm -g /var/corefiles/%f.%p
      

Procedure如何启用每进程核心转储文件路径

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启用每进程核心转储文件路径。


    # coreadm -e process
    
  3. 显示当前的进程核心转储文件路径,以验证配置。


    $ coreadm $$
    1180:   /home/kryten/corefiles/%f.%p

Procedure如何启用全局核心转储文件路径

  1. 成为超级用户或同等角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”

  2. 启用全局核心转储文件路径。


    # coreadm -e global -g /var/core/core.%f.%p
    
  3. 显示当前的进程核心转储文件路径,以验证配置。


    # coreadm
           global core file pattern: /var/core/core.%f.%p
         global core file content: default
           init core file pattern: core
           init core file content: default
                global core dumps: enabled
           per-process core dumps: enabled
          global setid core dumps: disabled
     per-process setid core dumps: disabled
         global core dump logging: disabled