fcinit 命令

用途

建立或继承一个首次故障数据捕捉执行环境。

语法

在 Bourne 和 Korn Shell 程序中:

/opt/rsct/bin/fcinit.sh [ [ -l ] [ -s {c | i } ] ] | [ -h ]

在 C shell 中:

source /opt/rsct/bin/fcinit.csh[ [ '-l' ] [-s{ 'c'i} ] ] ]| [ '-h]

描述

希望使用 FFDC 接口向AIX®错误日志、BSD 系统日志或 FFDC 错误堆栈记录信息的脚本程序必须使用该接口。

因下面的原因,应用程序希望建立一个 FFDC 环境:

  • 脚本可能希望将信息记录到AIX错误日志中。 脚本程序能使用 fcinit 建立一个基本的 FFDC 环境
  • 脚本程序希望其自身以及自身或自身的子程序所创建的任何派生进程能在 FFDC 错误堆栈中记录故障信息。 在这种情况下,脚本程序将自己看成是一个顶层应用程序,此顶层应用程序将创建多个底层应用程序,而顶层应用程序要成功完成,需要取决于这些底层应用程序的成功完成。 当以这种方式使用 fcinit 命令时,那么称进程建立 创建了 FFDC 错误堆栈环境。
  • 仅当脚本程序被其祖先进程调用,而该祖先进程欲将故障信息或跟踪信息记录到 FFDC 错误堆栈或 FFDC 跟踪中时,脚本程序才使用 FFDC 错误堆栈或 FFDC 跟踪。 在其他情况下,脚本程序并不希望使用这些设备。 当在这种方式下使用 fcinit 时,称进程继承 了 FFDC 错误堆栈环境。

任何希望通过 FFDC 接口将信息记录到 AIX 错误日志或 BSD 系统日志的进程都必须建立 FFDC 环境。 如果该进程不想使用一个 FFDC 错误堆栈,那么该进程能建立一个不使用 FFDC 错误堆栈的基本 FFDC 环境。 当某个进程想将来自自身或者自身所创建的线程以及它所创建的任何派生进程的故障信息记录在一个 FFDC 错误堆栈中时,该进程将建立一个包含 FFDC 错误堆栈的 FFDC 错误堆栈环境。 仅当某个进程的祖先进程之一要求它在一个 FFDC 错误堆栈文件中记录故障信息时,该进程将继承一个包含 FFDC 错误堆栈的 FFDC 错误堆栈环境;在其他情况下,该进程将不会在 FFDC 错误堆栈中记录故障信息。

在包含一个 FFDC 错误堆栈的 FFDC 错误堆栈环境中,保存了一个 FFDC 错误堆栈文件,这样故障信息记录在 /var/adm/ffdc/stacks 目录中的一个文件中。 这些文件采用 script_name.PID.date_and_time 的命名格式,这里 script_name 是脚本本身的名称 PID 是脚本的进程标识,date_and_time 是脚本执行的日期和时间。 无论何时当该脚本程序或其子进程在 FFDC 错误堆栈中记录故障信息时,它将记录在该文件中。

要使一个进程在 FFDC 错误堆栈中记录信息,该进程必须使用 fcpushstk FFDC 接口,并且进程必须在一个已建立的 FFDC 错误堆栈环境中运行。 如果不存在一个 FFDC 错误堆栈环境,或者当存在一个 FFDC 错误堆栈环境而没有使用 fcpushstk 接口时,那么该进程不会在 FFDC 错误堆栈中记录信息。 当不需要故障调试信息时,该功能可以使进程处于正常或“安静”方式,而且当在一个特定环境中调用进程进行调试时,使用该功能也可以获得信息。

fcinit 必须在 FFDC 客户机进程环境(“源”)中执行,以使得该命令能够正确地为脚本程序设置 FFDC 环境。 使用该命令的基于脚本 FFDC 客户机必须获取此命令,以使得 fcinit 在客户机进程映像中执行。 如果没有作到该点, FFDC 接口程序会在自身的进程映像中执行;当 FFDC 接口程序执行结束后,FFDC 环境中的任何设置将会丢失。 要演示一个基于脚本应用程序如何获取 fcinit 命令,一个 Korn Shell 程序将发出以下指令:

. fcinit.sh <options and arguments>

一个 C shell 脚本将会这样:

source fcinit.csh <options and arguments>

使用 fclogerr FFDC 接口的进程必须建立一个 FFDC 环境。 如果进程仅希望使用 fclogerr 接口,那么可以建立一个没有 FFDC 错误堆栈的 FFDC 环境。

如果已经存在一个 FFDC 环境,而脚本程序试图创建一个时,该脚本程序将会继承已存在的 FFDC 环境而不是创建自己的一个 FFDC 环境。

标志

-h
在标准输出设备上显示帮助消息并退出。 不管指定什么选项,都不执行其他处理。
-l
表示进程只希望使用AIX错误日志。 如果指定了-s选项,则不必使用该选项,因为在 FFDC 错误堆栈环境中允许使用AIX错误日志。
-s
指示要建立一个 FFDC 错误堆栈环境。 要使用 fcpushstk 接口的应用程序必须指定该标志。 当此命令成功完成时,会为 /var/adm/ffdc/stacks 目录中的脚本程序保存一个 FFDC 错误堆栈文件。 此标志必须指定为下面两个可能的选项之一:
c
要求创建 FFDC 错误堆栈环境。 如果一个祖先进程没有建立一个 FFDC 错误堆栈环境,那么将建立一个。 如果一个祖先进程以前建立过这样的环境,那么该进程将 继承 FFDC 错误堆栈环境,就好像指定了 i 选项一样。
i
如果一个祖先进程以前建立了一个 FFDC 错误堆栈环境,那么指定该环境要被继承 。 如果先前未由祖代进程建立 FFDC 错误堆栈环境,那么不会为此进程建立 FFDC 错误堆栈环境,并且此进程无法使用 FFDC 错误堆栈 (尽管它可以使用 AIX 错误日志和 BSD 系统日志)。

参数

file_name
用于搜索一个 FFDC 故障标识的文件名。 可能提供多个文件。 如果没有给出文件名,那么 fcfilter 从标准输入中读入。

退出状态

fcinit 在结束时返回以下退出状态代码:

0
成功建立了 FFDC 环境。
1
成功继承了 FFDC 环境。
2
显示帮助信息,处理结束。

fcinit 在检测到一个故障时,返回以下退出状态代码:

12
没有建立或继承 FFDC 环境 — 提供了一个未知的功能参数。
13
没有建立或继承 FFDC 错误堆栈环境 - 调用者指示应创建和继承 FFDC 环境。
14
在调用中没有建立 FFDC 环境 - 调用者已经有一个为其建立的 FFDC 环境 - 该例程可能已经执行了多次。
15
没有建立或继承 FFDC 错误堆栈环境 - 不存在一个 FFDC 错误堆栈环境,且指定了 FC_INHERIT 选项。
16
没有建立或继承 FFDC 环境 - 该例程不能修改客户机的进程环境。
17
没有建立或继承 FFDC 环境 - FFDC 环境看来被损坏了,应被认为不可用了。
18
没有建立或继承 FFDC 环境 - 该例程不能分配所需的内存去修改客户机的进程环境。
19
没有建立或继承 FFDC 错误堆栈环境 - 不能为调用进程保留 FFDC 错误堆栈文件 - FFDC 错误堆栈目录不存在或不能被使用。
21
没有建立或继承 FFDC 错误堆栈环境 - 不能为调用进程保留 FFDC 错误堆栈文件 - 该文件已经存在
42
没有建立或继承 FFDC 错误堆栈环境 - 系统管理员已经禁用了 FFDC 错误堆栈的创建和使用。 脚本只能建立使用 AIX 错误日志和 BSD 系统日志的基本 FFDC 环境。
99
没有建立或继承 FFDC 环境 - 在 fcinit 执行中发生了一个不可预料的内部故障。 该情况需要引起客户和应用程序支持服务的注意。

示例

对于 Korn Shell 程序脚本,用于建立基本 FFDC 环境以仅使用 AIX 错误日志和 BSD 系统日志 (不使用或保留 FFDC 错误堆栈):

# Set up an FFDC Environment to use the AIX Error Log only. An FFDC Error
# Stack is not needed for this script.
. fcinit.sh -1
rc=$?
if ((rc != 0))
    then
         print "fcinit failed with exit code of $rc"
         exit 1
fi
# Normal processing starts

某个 Korn shell 脚本要建立一个 FFDC 错误堆栈环境,该环境会导致脚本程序以及任何派生进程在 FFDC 错误堆栈中记录故障信息:

# Set up FFDC Environment to record failure information to the FFDC Error
# Stack
. fcinit.sh -sc
rc=$?
if ((rc != 0))
then
    print "fcinit failed with a code of $rc"
    exit 1
fi
# Normal processing starts
注意:FFDC 客户端可能会收到 FFDC 错误堆栈环境被继承而非由fcinit 调用创建的提示。 这种情形发生在该进程的祖先之一已经建立了一个 FFDC 错误堆栈环境的情况下。

要从进程的父进程继承一个 FFDC 错误堆栈环境:

# Inherit an FFDC Environment from parent process if it exists - otherwise,
# operate in a normal "silent" mode
. fcinit.sh -si
rc=$?
if ((rc != 0))
then
    print "fcinit failed with a code of $rc"
    exit 1
fi
# Normal processing starts

实现细节

此命令是 Reliable Scalable Cluster Technology (RSCT) 文件集的一部分。