AIX命令参考大全,卷 2,d - h - fclogerr 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 2,d - h

fclogerr 命令

用途

在 AIX 错误日志和 BSD 系统日志中记录有关故障信息或值得注意的情况的信息。

语法

/usr/sbin/rsct/bin/fclogerr { -e event -t error_template_label -i error_template_headerfile -r resource -s source_filename -p line_of_code_pos -v sidlevel -l lpp_name -a assoc_fid { [ -d detail_data_item[,detail_data_item,...] -x detail_data_type[,detail_data_type,...] -y detail_data_len[,detail_data_len,...] ] | [ -f detail_data_file] } -b BSD_syslog_message_text } | -h

描述

任何一个脚本程序使用该接口,用来在 AIX 错误日志和 BSD 系统日志中记录信息。写入该设备的信息,是用于系统管理员或操作员去确定系统上已发生了哪些需要关注的故障情况或其它值得注意的情况。AIX 错误日志和 BSD 系统日志的用途是记录有关某种情况的足够信息,以便从报告中确定该情况的性质、影响和响应,而不需要重新生成这种情况去检测发生了什么情况,在哪里发生的。如果任何软件遇到了需要直接干预才能消除的永久性故障情况,或者是遇到了需要引起系统管理员注意的情况,则应该使用 fclogerr 在 AIX 错误日志和 BSD 系统日志中记录该信息。

脚本程序应在使用 fclogerr 之前,通过直接创建或继承,建立一个基本的 FFDC 环境或一个 FFDC 错误堆栈环境。即使没有建立这些环境,fclogerr 也可在 AIX 错误日志和 BSD 系统日志中记录信息,但接口不能生成一个 FFDC 故障标识符,除非存在这些环境之一。

设计用来使用 FFDC 错误堆栈的进程也可以使用 fclogerr 接口,而且当进程遇到需要管理员注意或干预解决的情况时,也应使用它。

为确保正确识别发生的情况以及发生的位置,FFDC 策略建议应在脚本源代码模块中内联调用 fclogerr,并且一旦检测到情况发生时就调用。fclogerr 将记录源代码文件名和代码信息行,以帮助识别和定位遇到此情况的源代码。如果必要的话,fclogerr 能被一个子例程或自动加载的例程所调用来记录这些信息,这是在假设外部例程可以获得所有的位置信息以及必要的详细故障信息的情况下。外部的记录例程必须要记录下检测到的情况的真实位置。

虽然 fclogerr 可在 AIX 错误日志和 BSD 系统日志中记录信息,还必须给这个接口提供不同的选项以用于每一种记录设备。记录在 AIX 错误日志中的数据详细信息也不会记录在 BSD 系统日志中;BSD 系统日志信息是通过不同的命令选项提供的。这可能要求 fclogerr 的用户在该调用中复制一些信息。

标志

-a
包含了软件所报告一个故障情况的 FFDC 故障标识符,该软件被导致或引起了在此时被记录的该故障情况的应用程序使用。作为软件结果指示的一部分,该标识符应该已经返还给该应用程序。调用者在此提供该标识符是为了使 FFDC 错误堆栈能够将这个时刻生成的错误报告同先前记录的错误报告联系起来。这就能够使问题调查者从该应用程序产生的各种症状中跟踪故障的原因,并使他人找出其它软件中的根本原因。如果没有其它的软件故障和这种情况有关,或是如果其它软件没有返回一个 FFDC 故障标识符作为其结果信息的一部分时,应省略该选项。
-b
说明要被写入 BSD 系统日志的文本信息。
-d
提供有关故障情况的详细信息的一个或多个数据项,它们被用于在 AIX 错误日志的条目中提供详细数据。如果信息的细节太长了,则这些详细信息会被写入一个文件中,且那个文件名会作为 detail_data_file 参数。如果给出了一个详细数据文件名,则应省略该选项。如果没有提供 detail_datadetail_data_file 参数或者它们是无效的,则在 AIX 错误日志中为详细数据记录空信息。

该选项可以给出一个以上的数据项。 每一个数据项必须用逗号(,)分隔,中间不能有空格。如果在一个数据项中有空格字符,则该数据项必须用双引号(“”)括起来。数据项自身不能包含逗号(,),因为该命令将把命令解释为一个域分隔符。

该选项 必须 -x 选项和 -y 选项一起使用。

-e
说明了 FFDC 日志事件类型。当前有效的值有 FFDC_EMERG、FFDC_ERROR、FFDC_STATE、FFDC_TRACE、FFDC_RECOV 和 FFDC_DEBUG。该代码给出了所记录的事件类型的常规性描述(紧急情况,永久性情况,通知信息,调试信息等等。)以及发生情况的严重程度。如果没有该选项,则事件记录的事件类型被赋值为 FFDC_DEBUG。
-f
某个文件名,该文件包含了所报告情况的详细信息。当详细信息太长,而不能记录在由 fclogerr 命令留给应用程序用来记录详细数据信息的 100 个字节的空间中时,或是当存在一个能够分析详细信息的实用程序时,使用该选项。该文件的内容被复制到 /var/adm/ffdc/dumps 目录中,且该文件的新位置作为详细数据记录在 AIX 错误日志的条目中。
-h
向标准输出设备上显示帮助信息并退出。无论指定什么选项,不执行其它处理。
-i
说明了头文件(.h)的绝对路径名,该头文件包含了错误日志模板标识号,该标识号是与用 -l 选项说明的 error_template_label 相对应的。这个模板必须也存在于节点的错误日志模板库中(/var/adm/ras/errtmplt)。该头文件是作为软件源代码的建立过程的一部分,由 errupdate 命令生成的,且该头文件应被包括在 LPP 包中,LPP 包随该软件安装在节点上。如果在执行脚本程序时没有指定这个选项,或找不到头文件,则 fclogerr 会使用自身缺省的错误模板来记录故障信息(标号是 FFDC_DEF_TPLT_TR,标识符代码是 2B4F5CAB)。
-l
指定在其中装载了该软件的许可编程产品名称的缩写。这个值对于用户和支持应用程序的服务都必须是可识别的,并且将它作为 LPP 可接受的名称。这些值的示例如下:PSSP、GPFS、LoadLeveler 和 RSCT。如果这个选项没有提供或者似乎无效的话,就要使用 PPS_PRODUCT 字符串。
-p
指定了源代码模块中的代码行位置,在该行位置处报告了某种情况。这个值必须是有效的整数值。要对情况做出正确的识别和定位,该值必须尽可能接近那个产生情况报告的代码行位置。Korn Shell 能够使用 $LINENO 值。不能提供一个特定行计数变量的脚本语言可以提供一个符号值,开发者可以使用该符号值,在使用 fclogerr 的源代码中定位那个地点。如果这个选项无效或者没有提供,那么将会采用 0 值。
-q
禁止命令中警告消息的生成。当命令必须用缺省信息来替换丢失信息时,或者命令不能将 detail_data_file 复制到 /var/adm/ffdc/dumps 目录时,就会生成警告。
-r
指定软件组件名。这是一个产生报告的软件的符号名,该符号名应被客户和应用程序支持服务所识别。字符串的长度限制为16个字符。
-s
指定包含遇到报告情况的代码行的源文件名。对于 Korn 和 Borne shell 脚本来说,该选项的参数应设置为 $0;C shell 脚本应将这个参数值设为 ${0}。如果没有提供该选项或是一个无效选项,则使用字符串 unknown_file
-t
指示了一个符号标号,该标号被赋给了错误日志库中的 AIX 错误日志模板。建立错误日志模板的 errupdate 命令创建了一个宏,该宏将这个标号映射到一个整数代码。这个标号以字符 ERRID_ 打头,最大长度为19个字符。当脚本程序执行时,如果没有指定该选项或没有找到头文件,则 fclogerr 将使用 OPMSG 模板,调用 errlogger 在 AIX 错误日志中创建一个消息。
-v
指示检测出所记录情况的源代码模块的 SCCS 版本号。对于在 SCCS 控制下建立的源代码,版本号将被设置为 "1.1"(必须有双引号)。如果没有提供该选项或是一个无效选项,则使用字符串 unknown
-x
当在 AIX 错误日志中记录数据项信息时,指示了 -d 选项指定的这些数据项是如何被解释的。这些类型必须与 -t 选项所指定的 AIX 错误日志模板中的相应字段相一致。每一种类型都指示了 -d 列表中相应数据项是如何被解释的。该选项可接受的值有 ALPHA、HEX 和 DEC。对于 -d 列表中的每一个参数,必须有一个在 -x 参数中列出的相匹配的类型。

如果给出了 -d 选项,则必须给出此选项。

-y
指示了由 -d 选项所指定的数据项长度(按字节数)。这些长度值必须与 -t 选项指定的 AIX 错误日志模板中相应的字段相一致。对于 -d 列表中的每一个参数,必须有一个在 -y 参数中相匹配的类型。

如果给出了 -d 选项,就必须给出此选项。

参数

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

退出状态

fclogerr 在成功结束时,返回下列退出状态码:

0
将记录在 AIX 错误日志和 BSD 系统日志中的已成功排队的信息。这个记录的 FFDC 故障标识符显示在标准输出中。调用者应该捕获标准输出以获得该值。
2
显示帮助信息并结束进程。
12
没有在 AIX 错误日志中记录信息,且该命令没有给出 FFDC 故障标识符。该命令的使用者给出了命令的一个无效选项。

在 AIX 以外的其它 UNIX 平台上,当发生一个故障时,fclogerr 返回下列的退出状态码:

38
BSD 系统日志不能为该事件产生一个记录。系统日志正遇到了某种故障。在 AIX 系统上,将在 AIX 错误日志中记录一个报告;在其它系统中,将认为此情况是一个故障。

当给 fclogerr 提供了不完整的信息时,它将用缺省信息去代替缺少的信息,并试图在 FFDC 错误堆栈上产生一个记录。在这些情况下,将产生警告,并且生成警告信息,除非指定了 -q 选项。当检测到多于一个的警告情况时,该命令将返回一个退出状态码,该代码表示了该命令所认为的最严重情况。当检测到警告情况时,fclogerr 将返回下列退出状态代码:

10
命令的使用者没有成功为该命令提供一个 -i选项,或不能定位作为 -i 选项参数指定的头文件。在这种情况下,该命令将使用首次故障数据捕捉缺省模板(标号是 FFDC_DEF_TPLT_TR,标识符代码是 2B4F5CAB),在 AIX 错误日志中记录一般性信息。
26
向该例程提供一个有详细信息的数据字符串和一个详细的数据文件。例程选择了详细的数据字符串,并且忽略了有详细信息的数据文件。
28
没有提供检测到这个事件的资源名。使用缺省的资源名 ffdc 来替换缺少的资源名。
29
检测到的应用程序信息 — 源代码文件名、源代码文件版本、LPP 名称和代码位置行 — 没有提供。这些丢失信息被缺省信息所代替。
32
detail_data_file 参数中指定的文件不能被复制到 /var/adm/ffdc/dumps 目录中。FFDC 错误堆栈条目引用了该文件原来的版本。不要废弃该文件原有的副本。
33
没有指定 -e 选项,或没有指定一个有效的 FFDC 事件类型。事件类型 FFDC_DEBUG 被赋值给了这个事件记录。
34
format 参数中没有给出消息。因此,在 BSD 系统日志中记录了此事件的一条一般性消息。
35
没有提供关于该事件的详细信息。如果没有这些详细的信息,那么为了说明这次事件的细节,事后做问题分析时就可能会变得很困难。
36
详细数据串的长度超出了 AIX 错误日志条目的限值范围。将截短该详细数据以适应空间的大小。在信息的截短过程中,可能会丢失事件的一些信息。
37
不能为该例程所建立的报告去构造一个 FFDC 错误标识符。FFDC 故障标识符不会被显示在标准输出上,但是在 AIX 错误日志和 BSD 系统日志中将记录事件的有关信息。
38
在 BSD 系统日志中不能产生该事件的一个记录。系统日志可能处于禁用,或遇到了故障。在 AIX 系统上,将在 AIX 错误日志中记录一个报告;在其它系统中,将认为此情况是一个故障。

示例

例如,一个 Korn shell 脚本试图访问某个文件中的配置信息。如果访问没有成功,则脚本程序将使用下列模板源代码,在 AIX 错误日志中记录一个故障:

*! mymesgcat.cat
+ SP_FFDCEXMPL_ER:
    + SP_FFDCEXMPL_ER:
    Comment        = "Configuration Failed - Exiting"
    Class          = S
    Log       = true
    Report         = true
    Alert          = false
    Err_Type  = PERM
    Err_Desc  = {3, 10, "CONFIGURATION FAILURE - EXITING"}
    Prob_Causes    = E89B
    User_Causes    = E811
    User_Actions   = 1056
    Fail_Causes    = E906, E915, F072, 108E
    Fail_Actions   = {5, 14, "VERIFY USER HAS CORRECT PERMISSIONS TO ACCESS FILE"},
               {5, 15, "VERIFY CONFIGURATION FILE"}
    Detail_Data    = 46, 00A2, ALPHA
    Detail_Data    = 42, EB2B, ALPHA
    Detail_Data    = 42, 0030, ALPHA
    Detail_Data    = 16, EB00, ALPHA
    Detail_Data    = 16, 0027, ALPHA
    Detail_Data    = 4, 8183, DEC
    Detail_Data    = 4, 8015, DEC
    Detail_Data    = 60, 8172, ALPHA

该定义产生了下列的 AIX 错误日志模板:

LABEL:            ERRID_SP_FFDCEXMPL_ER
IDENTIFIER:        
Date/Time:         Sequence Number:   Machine Id:        Node Id:           Class:             S
Type:              PERM
Resource Name:     < 由  -r 选项填充到 fclogerr>

Description
CONFIGURATION FAILURE - EXITING

Probable Causes
COULD NOT ACCESS CONFIGURATION FILE

User Causes
USER CORRUPTED THE CONFIGRATION DATABASE OR METHOD

    Recommended Actions
    RE-CREATE FILE

Failure Causes
COULD NOT ACCESS CONFIGURATION FILE
PERMISSIONS ERROR ACCESSING CONFIGURATION DATABASE
FILE READ ERROR
FILE IS CORRUPT

    Recommended Actions
    VERIFY USER HAS CORRECT PERMISSIONS TO ACCESS FILE
    VERIFY CONFIGURATION FILE

Detail Data
DETECTING MODULE
<由 fclogerr 选项填充>
ERROR ID
<由 fclogerr 创建的 FFDC 故障标识符>
REFERENCE CODE
<到 fclogerr-a 选项值
FILE NAME
<必须作为 -d 选项列表的一部分提供给 fclogerr>
FUNCTION
<必须作为 -d 选项列表的一部分提供给 fclogerr>
RETURN CODE<“必须”作为 fclogerr-d 选项列表的一部分提供>
ERROR CODE AS DEFINED IN sys/errno.h
<必须作为 -d 选项列表的一部分提供给 fclogerr>
USER ID< 必须作为 -d 选项列表的一部分提供给 fclogerr>

前三个“细节数据字段”由 fclogerr 例程根据参数中传递的信息来构造。其余的“详细数据”必须用 -d 选项提供,且提供的数据类型必须由 -x 选项指出。以下示例源代码段演示了这是如何实现的,以及如何调用 fclogerr 命令将信息记录在“AIX 错误日志”和“BSD 系统日志”中。

typeset CONFIG_FNAME
typeset INBUF
typeset MINUSDOPTS
typeset MINUSXOPTS
typeset MINUSYOPTS
typeset FID
integer MYCLIENT
integer RC
    :
MYCLIENT=$$
CONFIG_FNAME="/configfile.bin"
exec 3< $CONFIG_FNAME
    :
read -u3 INBUF
RC=$?
if ((RC != 0))
then
    # Create Detail Data Memory Block for AIX Error Log Template
    # Need to know the EXACT structure of the Template to do this correctly.
    #    Field 1 - filled in by fc_log_error
    #    Field 2 - filled in by fc_log_error
    #    Field 3 - filled in by fc_log_error
    #    Field 4 - name of configuration file being used - 16 bytes
    #    Field 5 - name of function call that failed - 16 bytes
    #    Field 6 - return code from failing function - 4 byte integer
    #    Field 7 - errno from failing function call (unused) - 4 byte integer
    #    Field 8 - user ID using this software - remaining space (62 bytes)
    # This source code supplied fields 4 through 8 in the "-d" option, and
    # describes the data types for each in the "-x" option.
    MINUSDOPTS=$CONFIG_FNAME
    MINUSXOPTS="ALPHA"
    MINUSYOPTS="16"
    MINUSDOPTS="$MINUSDOPTS,read"
    MINUSDOPTS="$MINUSDOPTS,configdabeast"
    MINUSXOPTS="$MINUSXOPTS,ALPHA"
    MINUSYOPTS="$MINUSYOPTS,16"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSDOPTS="$MINUSDOPTS,$MYCLIENT"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSDOPTS="$MINUSDOPTS,0"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSDOPTS="$MINUSDOPTS,$MYCLIENT"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSYOPTS="$MINUSYOPTS,60"
    FID=$(fclogerr -e FFDC_ERROR -t ERRID_SP_FFDCEXMPL_ER -i /usr/lpp/ssp/inc/
myprog.h -r myprog -s myprog.ksh -p $LINEPOS -v "1.1" -l PSSP -d $MINUSDOPTS -x
$MINUSXOPTS -y $MINUSYOPTS -b "myprog Configuration Failure - Exiting")
    RC=$?
    if ((RC == 0))
    then
         fcdispfid $FID
         return 1
    else
         :
    fi
fi

现在使用同样的 AIX 错误日志模板,考虑一下上面示例的一点变化,这一次使用一个外部命令去获取某个文件中的配置信息,该文件由源代码提供。该命令如果遇到了任何故障情况,则以非零的退出状态值退出,并在标准输出上显示一个 FFDC 故障标识符。另外,要演示在 -d 列表中使用双引号的情况,配置文件在名字中要有一个嵌入的空格:

typeset CONFIG_FNAME
typeset INBUF
typeset MINUSDOPTS
typeset MINUSXOPTS
typeset MINUSYOPTS
typeset FID
typeset OUTPUT
integer MYCLIENT
integer RC
    :
MYCLIENT=$$
CONFIG_FNAME="This is a test"
OUTPUT=$(configdabeast $CONFIG_FNAME)
RC=$?
if ((RC != 0))
then
    # Create Detail Data Memory Block for AIX Error Log Template
    # Need to know the EXACT structure of the Template to do this correctly.
    #    Field 1 - filled in by fc_log_error
    #    Field 2 - filled in by fc_log_error
    #    Field 3 - filled in by fc_log_error
    #    Field 4 - name of configuration file being used - 16 bytes
    #    Field 5 - name of function call that failed - 16 bytes
    #    Field 6 - return code from failing function - 4 byte integer
    #    Field 7 - errno from failing function call (unused) - 4 byte integer
    #    Field 8 - user ID using this software - remaining space (62 bytes)
    # This source code supplied fields 4 through 8 in the "-d" option, and
    # describes the data types for each in the "-x" option.
    MINUSDOPTS="\""$CONFIG_FNAME"\""
    MINUSXOPTS="ALPHA"
    MINUSYOPTS="16"
    MINUSYOPTS="16"
    MINUSDOPTS="$MINUSDOPTS,configdabeast"
    MINUSXOPTS="$MINUSXOPTS,ALPHA"
    MINUSYOPTS="$MINUSYOPTS,16"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSDOPTS="$MINUSDOPTS,$MYCLIENT"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSDOPTS="$MINUSDOPTS,0"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSDOPTS="$MINUSDOPTS,$MYCLIENT"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSXOPTS="$MINUSXOPTS,DEC"
    MINUSYOPTS="$MINUSYOPTS,4"
    MINUSYOPTS="$MINUSYOPTS,60"
    FID=$(fclogerr -e FFDC_ERROR -t ERRID_SP_FFDCEXMPL_ER -i /usr/lpp/ssp/inc/
myprog.h -r myprog -s myprog.ksh -p $LINEPOS -v "1.1" -l PSSP -d $MINUSDOPTS -x
$MINUSXOPTS -y $MINUSYOPTS -a $OUTPUT -b "myprog Configuration Failure - Exiting")
    RC=$?
    if ((RC == 0))
    then
         fcdispfid $FID
         return 1
    else
         :
    fi
fi

相关信息

命令:errpt, fcdecode, fcdispfid, fcinit, fcpushstk, fcreport

文件:ct_ffdc.h

子例程:fc_log_error (请参考 RSCT 首次故障数据捕获编程指南和参考大全))

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]