[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Глава 4. Извещение об ошибках

Объектный класс Извещение об ошибках определяет условия и действия, выполняемые при записи сообщений об ошибках в протокол ошибок. Эти условия и действия задаются пользователем в объекте извещения об ошибках.

Каждый раз, когда в протокол заносится ошибка, демон извещения об ошибках определяет, совпадает ли запись протокола ошибок с критериями выбора какого-либо объекта класса извещения об ошибках. Для каждого объекта, для которого обнаружено совпадение, демон выполняет запрограммированное действие, называемое также способом извещения.

Объектный класс Извещение об ошибках располагается в файле /etc/objrepos/errnotify. Объекты извещения об ошибках добавляются к объектному классу с помощью команд Администратора объектных данных (ODM). Объекты извещения об ошибках содержат следующие дескрипторы:

en_alertflg Указывает, следует ли предупреждать об ошибке. Этот дескриптор используется агентами предупреждений, связанными с программами сетевого управления. Допустимы следующие значения дескриптора:

TRUE
об ошибке следует предупреждать

FALSE
об ошибке предупреждать не нужно
en_class Идентифицирует класс записей протокола ошибок, проверяемых на совпадение. Допустимы следующие значения дескриптора en_class:

H
Класс аппаратных ошибок

S
Класс программных ошибок

O
Сообщения команды errlogger

U
Неопределенная ошибка
en_crcid Указывает идентификатор ошибки.
en_label Задает метку, связанную с конкретным идентификатором ошибки, согласно определению в выводе команды errpt -t.
en_method Определяет запрограммированное пользователем действие (например, сценарий оболочки или строку команд), которое выполняется при занесении в протокол ошибки, совпадающей с критериями выбора данного объекта извещения об ошибках. Для выполнения этого действия демон извещения об ошибках применяет команду sh -c.

Ниже перечислены ключевые слова, которые автоматически развертываются демоном извещения об ошибках как аргументы способа извещения.

$1
Порядковый номер записи в протоколе ошибок

$2
ИД ошибки из записи в протоколе ошибок

$3
Класс из записи в протоколе ошибок

$4
Тип из записи в протоколе ошибок

$5
Значения флагов предупреждений из записи в протоколе ошибок

$6
Имя ресурса из записи в протоколе ошибок

$7
Тип ресурса из записи в протоколе ошибок

$8
Класс ресурса из записи в протоколе ошибок

$9
Метка ошибки из записи в протоколе ошибок
en_name Однозначно идентифицирует объект. Это уникальное имя используется при удалении объекта.
en_persistenceflg Указывает, должен ли объект извещения об ошибках автоматически удаляться при повторном запуске системы. Например, чтобы избежать ошибочной генерации сигнала, при повторном запуске системы не должны сохраняться объекты извещения об ошибках, которые содержат действия, отправляющие сигнал другому процессу. Это связано с тем, что при повторном запуске системы процесс, который принимает сигнал, и его идентификатор не сохраняются.

За удаление объекта извещения об ошибках в нужное время отвечает его создатель. В том случае, когда процесс завершается без удаления объекта извещения об ошибках, дескриптор en_persistenceflg гарантирует, что при повторном запуске системы устаревшие объекты извещения об ошибках будут удалены.

Допустимы следующие значения дескриптора en_persistenceflg:

0
объекты не сохраняются (удаляются во время загрузки)

1
объекты сохраняются (не удаляются во время загрузки)
en_pid Задает идентификатор процесса (PID), который будет использоваться при идентификации объекта извещения об ошибках. Для объектов с указанным PID дескриптор en_persistenceflg должен быть равен 0.
en_rclass Идентифицирует класс ресурса, в котором происходит сбой. В классе аппаратных ошибок класс ресурса - это класс устройства. В классе программных ошибок это понятие неприменимо.
en_resource Идентифицирует имя ресурса, в котором происходит сбой. В классе аппаратных ошибок имя ресурса - это имя устройства.
en_rtype Идентифицирует тип ресурса, в котором происходит сбой. В классе аппаратных ошибок тип ресурса - это тип устройства, заданное в объектном классе "устройства".
en_symptom Разрешает извещение об ошибке, сопровождаемое строкой признаков, если равен TRUE.
en_type Идентифицирует уровень серьезности записей протокола ошибок, проверяемых на совпадение. Допустимы следующие значения дескриптора en_type:

INFO
Информационная запись

PEND
Угроза потери доступности

PERM
Постоянная ошибка

PERF
Недопустимое снижение производительности

TEMP
Случайная ошибка

UNKN
Неизвестная ошибка

TRUE
Совпадение с ошибками, о которых следует предупреждать

FALSE
Совпадение с ошибками, о которых предупреждать не нужно

0
Удаление объекта извещения об ошибках при повторном запуске системы

ненулевое_значение
Сохранение объекта извещения об ошибках при повторном запуске системы

Защита

Добавлять объекты в класс извещений об ошибках разрешено только процессам, которые запускаются пользователем root.


Примеры

  1. Для создания способа извещения, который будет отправлять пользователю root отформатированную запись об ошибке каждый раз, когда запись об ошибке на диске типа PERM заносится в протокол, создайте файл /tmp/en_sample.add со следующим объектом извещения об ошибках:

    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"
    

    Для добавления объекта в класс извещения об ошибках введите:

    odmadd /tmp/en_sample.add
    

    Команда odmadd добавляет объект извещения об ошибках, содержащийся в файле /tmp/en_sample.add, в файл errnotify.

  2. Для того чтобы проверить, добавлен ли объект извещения об ошибках в объектный класс, введите:

    odmget -q"en_name='sample'" errnotify
    

    Команда odmget находит объект извещения об ошибках с именем en_name = "sample" в файле errnotify и показывает его. Вывод команды выглядит следующим образом:

    errnotify:
        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 'Ошибка диска' root"
    
  3. Для удаления объекта sample из объектного класса извещения об ошибках введите:

    odmdelete -q"en_name='sample'" -o errnotify
    

    Команда odmdelete находит объект извещения об ошибках с именем en_name = "sample" в файле errnotify и удаляет его из объектного класса извещения об ошибках.

Связанная информация

Error Logging Special Files в книге AIX 5L Version 5.1 Files Reference.

Демон errdemon в книге AIX 5L Version 5.1 Commands Reference.

Команды errclear, errdead, errinstall, errlogger, errmsg, errpt, errstop, errupdate, odmadd, odmdelete и odmget в книге AIX 5L Version 5.1 Commands Reference.

Функция errlog в книге AIX 5L Version 5.1 Technical Reference: Base Operating System and Extensions Volume 1.

Служба ядра errsave в книге AIX 5L Version 5.1 Technical Reference: Kernel and Subsystems Volume 1.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]