Notificação de erro
A classe de objeto de Notificação de Erro especifica as condições e as ações a serem tomadas quando os erros são registrados no log de erros do sistema. O usuário especifica essas condições e ações em um objeto de Notificação de Erro.
Cada vez que um erro é registrado, o daemon notificação de erro determina se a entrada do log de erro corresponde aos critérios de seleção de qualquer um dos objetos de Notificação de Erro. Se correspondências existirem, o daemon executa a ação programada, também chamada de método de notificação, para cada objeto correspondido.
A classe de objeto de Notificação de Erro está localizada no arquivo /etc/objrepos/errnotify . Objetos de Notificação de Erro são incluídos na classe de objeto usando comandos do Object Data Manager (ODM). Apenas processos em execução com a autoridade do usuário root podem adicionar objetos à classe de objeto de Notificação de Erro. Os objetos de Notificação de Erro contêm os seguintes descritores:
- en_alertflg
- Identifica se o erro pode ser alertado. Este descritor é fornecido para uso por agentes de alerta associados a aplicativos de gerenciamento de rede utilizando o SNA Arquitetura Alert. Os valores de descritor de alerta válidos são:
- true
- pode ser alertado
- FALSO
- não pode ser alertado
- classe_en
- Identifica a classe das entradas do log de erro para combinar. Os valores de descritor en_class válidos são:
- S
- Classe de Erro de Hardware
- S
- Classe de Erro de Software
- o
- Mensagens do comando errlogger
- U
- Indeterminado
- en_crcid
- Especifica o identificador de erro associado a um determinado erro. Um identificador de erro pode ser qualquer valor numérico que seja válido como um valor de atributo de classe de objeto Atributo Predefinido (PdAt). O comando errpt exibe identificadores de erro como hexadecimal. Por exemplo, para selecionar uma entrada que o comando errpt exibe com
IDENTIFIER: 67581038, especifiqueen_crcid = 0x67581038. - en_dup
- Se configurado, identifica se erros duplicados conforme definido pelo kernel devem ser correspondidos. Os valores do descritor de en_dup válidos são:
- VERDADEIRO
- Erro é uma duplicata.
- FALSO
- Erro não é uma duplicata.
- en_err64
- Se configurado, identifique se erros de um ambiente de 64-bit ou 32-bit devem ser correspondidos. O valor de descritores válidos en_err64 são:
- VERDADEIRO
- Erro é de um ambiente de 64-bit.
- FALSO
- Erro é de um ambiente de 32-bit.
- en_label
- Especifica o rótulo associado a um identificador de erro particular conforme definido na saída do comando errpt -t .
- en_method
- Especifica uma ação programável pelo usuário, como um script shell ou cadeia de comandos, a ser executado quando um erro correspondente aos critérios de seleção deste objeto de Notificação de Erro é registrado. O daemon de notificação de erros usa o comando sh -c para executar o método notify.
As palavras chave a seguir são expandidas automaticamente pelo daemon notificação de erro como argumentos para o método de notificação.
- $1
- Número da sequência a partir da entrada do log de erros
- $2
- Erro ID da entrada do log de erro
- $3
- Classe a partir da entrada do log de erro
- $4
- Digite a partir da entrada do log de erro
- $5
- Alerta de valor das bandeiras da entrada do log de erro
- $6
- Nome do recurso a partir da entrada do log de erro
- $7
- Tipo de recurso a partir da entrada do log de erro
- $8
- Classe de recursos a partir da entrada do log de erro
- $9
- Erro rótulo da entrada do log de erro
- en_name
- Identifica-se com exclusividade o objeto. Este nome exclusivo é usado ao remover o objeto.
- en_persistenceflg
- Designa se o objeto de Notificação de Erro deve ser removido automaticamente quando o sistema é reiniciado. Por exemplo, para evitar sinalização errônea, os objetos de Notificação de Erro contendo métodos que enviam um sinal para outro processo não devem persistir através de reinícios do sistema. O processo de recebimento e seu ID de processo não persistem através de reinicializações do sistema.
O criador do objeto de Notificação de Erro é responsável por remover o objeto de Notificação de Erro no momento apropriado. No caso de o processo ser finalizado e falhar ao remover o objeto de Notificação de Erro, o descritor en_persistenceflg garante que objetos obsoletos de Notificação de Erro sejam removidos quando o sistema for reiniciado.
Os valores de descritor válidos en_persistenceflg são:
- 0
- não persistente (removido no tempo de inicialização)
- 1
- persistente (persiste através de boot)
- en_pid
- Especifica um ID de processo (PID) para uso na identificação do objeto de Notificação de Erro. Os objetos que possuem um PID especificado devem ter o descritor en_persistenceflg configurado para 0.
- classe en_r
- Identifica a classe do recurso falho. Para a classe de erro de hardware, a classe de recursos é a classe de dispositivo. A classe de erro de recurso não é aplicável para a classe de erro de software.
- en_recurso
- Identifica o nome do recurso falho. Para a classe de erro de hardware, um nome de recurso é o nome do dispositivo.
- en_rtype
- Identifica o tipo do recurso falho. Para a classe de erro de hardware, um tipo de recurso é o tipo de dispositivo pelo qual um recurso é conhecido na classe de objetos de dispositivos.
- en_sintoma
- Possibilita a notificação de um erro acompanhado de uma sequência de sintomas quando configurado como TRUE.
- en_type
- Identifica a gravidade das entradas do log de erro para correspondência. Os valores do descritor en_type válidos são:
- INFORMAÇÃO
- Informativo
- PENDENTE
- Perda iminente de disponibilidade
- PERM
- Permanente
- perf
- Degradação de desempenho inaceitável
- TEMP
- Temporário
- DESCONHECIDO
- Desconhecido
Exemplos
- Para criar um método de notificação que mails uma entrada de erro formatada para root cada vez que um erro de disco do tipo PERM for logado, crie um arquivo chamado/tmp/en_sample.addcontendo o seguinte objeto de Notificação de Erro:
Para adicionar o objeto à classe de objeto de Notificação de Erro, digite:errnotify: en_name = "sample" en_persistenceflg = 0 en_class = "H" en_type = "PERM" en_rclass = "disk" en_method = "errpt -a -l $1 | mail -s 'Disk Error' root"
O comando odmadd adiciica o objeto de Notificação de Erro contido em /tmp/en_sample.add ao arquivo errnotificar .odmadd /tmp/en_sample.add - Para verificar se o objeto de Notificação de Erro foi adicionado à classe de objeto, digite:
O comando odmget localiza o objeto de Notificação de Erro dentro do arquivo errnotificar que tem um valor en_name de"sample"e exibe o objeto. A saída a seguir é devolvida:odmget -q"en_name='sample'" errnotifyerrnotify: en_pid = 0 en_name = "sample" en_persistenceflg = 0 en_label = "" en_crcid = 0 en_class = "H" en_type = "PERM" en_alertflg = "" en_resource = "" en_rtype = "" en_rclass = "disk" en_method = "errpt -a -l $1 | mail -s 'Disk Error' root" - Para excluir osampleErro de Notificação de erro da classe de objeto de Notificação de Erro, digite:
O comando odmdelete localiza o objeto de Notificação de Erro dentro do arquivo errnotificar que tem um valor en_name de "sample"e remove-o da classe de objeto de Notificação de Erro.odmdelete -q"en_name='sample'" -o errnotify - Para enviar um e-mail para root quando ocorrer um erro duplicado, crie um arquivo chamado /tmp/en_sample.add contendo a estrofe de notificação de erro a seguir:
errnotify: en_name = "errdupxmp" en_persistenceflg = 1 en_dup = "TRUE" en_method = "/usr/lib/dupmethod $1"Crie o script /usr/lib/dupmethod da seguinte forma:
#!/bin/sh # email root when a duplicate error is logged. # We currently don't clear the duplicate from the log. # # Input: # $1 contains the error log sequence number. # # Use errpt to generate the body of this email. /usr/bin/errpt -al$1 | /usr/bin/mail -s "Duplicate Error Logged" root >/dev/null # Now delete that error (currently not done) #/usr/bin/errclear -l$1 0 exit $?