エラー通知
エラー通知オブジェクト・クラスは、 エラーがシステム・エラー・ログに記録された場合の条件と行うべきアクションを指定します。 ユーザーは、これらの条件とアクションをエラー通知オブジェクトに指定します。
エラーが記録されるたびに、エラー通知デーモンは、 エラー・ログ・エントリーがいずれかのエラー通知オブジェクトの選択基準に一致しているかどうかを判別します。 一致している場合、デーモンは一致しているオブジェクトごとに、 通知メソッドとも呼ばれるプログラム済みのアクションを実行します。
エラー通知オブジェクト・クラスは /etc/objrepos/errnotify ファイルに置かれます。 エラー通知オブジェクトは、 オブジェクト・データ・マネージャー (ODM) コマンドを使用して、 オブジェクト・クラスに追加されます。 エラー通知オブジェクト・クラスにオブジェクトを追加できるのは、root ユーザー権限を使用して実行中のプロセスだけです。 エラー通知オブジェクトには、以下のディスクリプターがあります。
- en_alertflg
- エラーの警報を行えるかどうかを示します。 このディスクリプターは、SNA アラート・アーキテクチャーを使用するネットワーク管理アプリケーションに関連した
警報エージェントによって使用されます。 有効な警報用ディスクリプターの値は次のとおりです。
- TRUE
- 警報を行えます。
- FALSE
- 警報を行えません。
- en_class
- 突き合わせるエラー・ログ・エントリーのクラスを示します。 有効な en_class ディスクリプターの値は次のとおりです。
- h
- ハードウェア・エラー・クラス
- S
- ソフトウェア・エラー・クラス
- O
- errlogger コマンドからのメッセージ
- U
- 未判別
- en_crcid
- 特定のエラーに関連するエラー ID を指定します。 エラー ID は、 事前定義属性 (PdAt) オブジェクト・クラス属性値として有効な任意の数値にすることができます。 errpt コマンドは、エラー ID を 16 進数として表示します。 例えば、 errpt コマンドが
IDENTIFIER: 67581038とともに表示するエントリーを選択するには、en_crcid = 0x67581038と指定します。 - en_dup
- 設定されている場合、カーネルにより定義されている重複エラーが突き合わされるべきかどうかを識別
します。 有効な en_dup ディスクリプターの値は次のとおりです。
- はい
- エラーは重複している。
- いいえ
- エラーは重複していない。
- en_err64
- 設定されている場合、64 ビットまたは 32 ビット環境からのエラーが突き合わされるべきかどうかを識別
します。 有効な en_err64 ディスクリプターの値は次のとおりです。
- はい
- エラーは 64 ビット環境からである。
- いいえ
- エラーは 32 ビット環境からである。
- en_label
- errpt -t コマンドの出力で定義された特定のエラー ID に関連するラベルを指定します。
- en_method
- このエラー通知オブジェクトの選択基準に一致するエラーが記録された場合に実行する、
ユーザーがプログラムできるアクション (シェル・スクリプトまたはコマンド文字列など) を指定します。 エラー通知デーモンは、sh-cコマンドを使ってnotifyメソッドを実行する。
以下のキー・ワードは、 通知メソッドへの引数としてエラー通知デーモンによって自動的に拡張されます。
- $1
- エラー・ログ・エントリーからのシーケンス番号
- 2 ドル
- エラー・ログ・エントリーからのエラー ID
- $3
- エラー・ログ・エントリーからのクラス
- $4
- エラー・ログ・エントリーからのタイプ
- $5
- エラー・ログ・エントリーからの警報フラグ値
- $6
- エラー・ログ・エントリーからのリソース名
- $7
- エラー・ログ・エントリーからのリソース・タイプ
- $8
- エラー・ログ・エントリーからのリソース・クラス
- $9
- エラー・ログ・エントリーからのエラー・ラベル
- en_name
- オブジェクトを固有識別します。 この固有の名前は、オブジェクトを除去する際に使用します。
- en_persistenceflg
- システムの再始動時に、エラー通知オブジェクトを自動的に除去するかどうかを指定します。 例えば、シグナルのエラーを回避するために、
シグナルを別のプロセスに送信するメソッドの入ったエラー通知オブジェクトを、
システムの再始動から次の再始動に持ち越してはなりません。 送信先のプロセスおよびそのプロセス ID は、
システム再始動間では持続されません。
エラー通知オブジェクトの作成者は、 エラー通知オブジェクトを適切な時に除去する責任があります。 プロセスが終了し、エラー通知オブジェクトの除去に失敗した場合、 en_persistenceflg ディスクリプターによって、 システムの再始動に古いエラー通知オブジェクトが確実に除去されます。
有効な en_persistenceflg ディスクリプターの値を次に示します。
- 0
- 非持続 (ブート時に除去される)
- 1
- 持続 (ブート時に除去されない)
- en_pid
- エラー通知オブジェクトを識別するために使用するプロセス ID (PID) を指定します。 PID を指定したオブジェクトの en_persistenceflg ディスクリプターは 0 に設定する必要があります。
- en_rclass
- 失敗したリソースのクラスを示します。 ハードウェアのエラー・クラスの場合、 リソース・クラスはデバイス・クラスです。 ソフトウェアのエラー・クラスの場合、 リソース・エラー・クラスは適用されません。
- en_resource
- 失敗したリソースの名前を示します。 ハードウェアのエラー・クラスの場合、 リソース名はデバイス名です。
- en_rtype
- 失敗したリソースのタイプを示します。 ハードウェアのエラー・クラスの場合、 リソース・タイプは、 デバイス・オブジェクト・クラス内でリソースを指定するためのデバイス・タイプです。
- en_symptom
- TRUE に設定すると、症状文字列を伴うエラーの通知が可能になります。
- en_type
- 突き合わせるエラー・ログ・エントリーの重大度を示します。 有効な en_type ディスクリプターの値を以下に示します。
- 情報
- 通知
- PEND
- 近々使用不可になる可能性
- PERM
- 永続
- PERF
- 受諾不能なパフォーマンス低下
- TEMP
- 一時的
- UNKN
- 不明
例
- タイプ 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 に入っているエラー通知オブジェクトを errnotify ファイルに追加します。odmadd /tmp/en_sample.add - エラー通知オブジェクトがオブジェクト・クラスに追加されたことを確認するには、次のように入力します。
odmget コマンドは、以下の en_name 値を持つ errnotify ファイル内のエラー通知オブジェクトを見つけます。"sample"オブジェクトを表示します。 次の出力が戻されます。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" - 以下を削除します。sampleエラー通知オブジェクト・クラスからのエラー通知オブジェクト、タイプ:
odmdelete コマンドは、 en_name 値が errnotify ファイル内のエラー通知オブジェクトを見つけます。 "sample"エラー通知オブジェクト・クラスから削除します。odmdelete -q"en_name='sample'" -o errnotify - 重複エラー発生時にルートに電子メールを送信するために、
以下のエラー通知スタンザを含む /tmp/en_sample.add という
ファイルを作成します。
errnotify: en_name = "errdupxmp" en_persistenceflg = 1 en_dup = "TRUE" en_method = "/usr/lib/dupmethod $1"以下のような /usr/lib/dupmethod スクリプトを作成します。
#!/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 $?