JP1/Cm2/Extensible SNMP Agent
ここでは,/etc/SnmpAgent.d/snmpd.extendファイルに記述するユーザー独自のシェルコマンドの作成方法について説明します。
シェルコマンドはUNIXのシェルスクリプトまたはプログラムです。/opt/OV/prg_samples/eagentディレクトリに,/etc/SnmpAgent.d/snmpd.extendファイルの作成例を提供しています。作成例にシェルコマンドのサンプルが記載されています。
コマンド名を記述するときの注意事項を次に示します。
- コマンド名は/etc/SnmpAgent.d/snmpd.extendファイルのDESCRIPTIONフィールドに記述してください。
- コマンド名の最大長は5,120字です。
- コマンド名は複数行に継続できます。継続行は\で終了させてください。
- READ-COMMAND,WRITE-COMMAND,FILE-COMMANDで定義したコマンドはroot権限で実行します。これらのコマンドにrootが実行可能なファイル属性を設定してください。
コマンドの作成手順を次に示します。
- コマンドを実行したいシステムへログインする。
- スクリプトまたはプログラムを記述する。
- シェルコマンドの動作を確認する。
- 出口コードをチェックする。
- シェルコマンドの引数を確認する。
次に,コマンドの作成方法を説明します。
- <この項の構成>
- (1) コマンドを実行したいシステムへのログイン
- (2) スクリプトまたはプログラムの記述
- (3) シェルコマンドの動作確認
- (4) 出口コードのチェック
- (5) シェルコマンドの引数の確認
コマンドを実行したいシステムへログインします。
スクリプトまたはプログラムの記述方法を次に示します。
- 引数
SNMPエージェントがコマンドに引数を渡すには,次の表に示す引数を任意で使用します。記述は順不同です。
非テーブル形式のMIBオブジェクトで,/opt/OV/prg_samples/eagent/num_widgetsコマンドを実行するとき,SNMPエージェントがコマンドにマネージャーのIPアドレス,コミュニティ名,およびオブジェクト識別子の値を渡す例を示します。/etc/SnmpAgent.d/snmpd.extendファイルのDESCRIPTIONフィールドは次のように記述します。
引数 渡される値 $i マネージャーのIPアドレス。インターネットのドット記法で表現されます。 $c リクエスト中のコミュニティ名。 $o リクエスト中のオブジェクト識別子。ドット記法で表現されます。 $s オブジェクトのシンタクス。次のどれかの値が渡されます。
Integer,OctetString,ObjectIdentifier,Null,NetworkAddress,IpAddress,Counter,Counter64,Gauge,TimeTicks,Opaque,DisplayString,PhysAddress$r リクエストの種類。次のどれかの値が渡されます。
GetRequest,GetNextRequest,SetRequest,PostSetRequest
PostSetRequestは,file_nameの読み出したあとにだけ渡される値です。$I リクエスト中の接尾辞。 $* すべての引数,$i $c $o $s $r $Iと指定したのと同じです。 $$ $文字を引数として渡したい場合,$$と指定します。$の1文字が引数として渡されます。 Set値 SetRequest,およびPostSetRequestの場合,SetRequest中のSet値が渡されます。この値は引数リストの最後に渡されます。
また,テーブル形式のMIBオブジェクトで,FILE-NAMEラベルに記述したファイルを読む前に/opt/OV/prg_samples/eagent/update_inetdコマンドを実行するとき,SNMPエージェントがコマンドにリクエストの種類を渡す例を示します。/etc/SnmpAgent.d/snmpd.extendファイルのDESCRIPTIONフィールドは次のように記述します。
READ-COMMAND: /opt/OV/prg_samples/eagent/num_widgets $i $c $o
引数の記述がない場合,SNMPエージェントはREAD-COMMANDラベルおよびFILE-COMMANDラベルに記述したコマンドに引数は渡しません。
FILE-COMMAND: /opt/OV/prg_samples/eagent/update_inetd $r
SNMPエージェントは,WRITE-COMMANDラベルおよびFILE-COMMANDラベルに記述したコマンドに引数の記述がない場合,リクエスト中のSet値を一つだけ渡します。
- getおよびsetオペレーションで同じコマンドを使用する場合の引数
READ-COMMANDラベルおよびWRITE-COMMANDラベルに記述する二つのコマンドに同じコマンドを使用したい場合は,コマンドに渡す引数でGetRequestかSetRequestかを区別します。記述する引数を次に示します。
- READ.REQ
- getオペレーションで使用したい場合
/usr/bin/my_commandというコマンドを使用する場合は次のように記述します。
- WRITE.REQ
- setオペレーションで使用したい場合
- READ-COMMAND
- /usr/bin/my_command READ.REQ
- WRITE-COMMAND
- /use/bin/my_command WRITE.REQ
- サーチパス
コマンド名は,完全パス名で記述してください。
- 戻り値
READ-COMMANDラベルに記述したコマンドの戻り値は,標準出力または標準エラー出力に出力してください。
- 実行
作成したコマンドは,/bin/shによって実行されたように見えます。exit,read,if,forのシェルコマンドも記述できます。
- 出口コード
READ-COMMANDラベルおよびWRITE-COMMANDラベルに記述したシェルコマンドは必ず0で終了してください。0以外の出口コードで終了すると,次のように動作します。
- SNMPv1の場合
- get-requestのとき:マネージャーにnoSuchNameをエラー応答
- get-next-requestのとき:次のオブジェクトを検索
- set-requestのとき:マネージャーにgenErrをエラー応答
FILE-COMMANDラベルに記述したコマンドの出口コードは,必ず0で終了してください。0以外の出口コードで終了すると,次のように動作します。
- SNMPv2cの場合
- get-requestのとき:マネージャーにnoSuchInstanceをエラー応答
- get-next-requestのとき:次のオブジェクトを検索
- set-requestのとき:マネージャーにcommitFailedをエラー応答
- SNMPv1の場合
- get-requestのとき:マネージャーにnoSuchNameをエラー応答
- get-next-requestのとき:次のオブジェクトを検索
- set-requestのとき:マネージャーにgenErrをエラー応答
また,SNMPエージェントがユーザーのシェルコマンドを実行した結果,コマンドがないなどのエラーが発生した場合も,すべて同じ動作をします。
- SNMPv2cの場合
- get-requestのとき:マネージャーにnoSuchInstanceをエラー応答
- get-next-requestのとき:次のオブジェクトを検索
- set-requestで非テーブル型でSetRequest/PostSetRequestのとき:マネージャーにcommitFailedをエラー応答
- set-requestでテーブル型でSetRequestのとき:マネージャーにgenErrをエラー応答
- set-requestでテーブル型でPostSetRequestのとき:マネージャーにcommitFailedをエラー応答
コマンドを実行して,シェルコマンドが正常に実行されることを確認します。
/etc/SnmpAgent.d/snmpd.extendファイル中にあるfmailListMsgs関連のコマンドが正常に実行できることを確かめるためには,次に示すコマンドを実行します。
/usr/bin/mailq正常に実行した場合,コマンドはメールメッセージのリストを標準出力します。
次に示すコマンドを実行して,値が0ならば,シェルコマンドは成功したことを示します。
echo $?
シェルコマンドで引数を使用している場合は,その引数を確認します。
/etc/SnmpAgent.d/snmpd.extendファイルの定義および引数の確認の例を次に示します。
- /etc/SnmpAgent.d/snmpd.extendファイルの定義
- READ-COMMAND:/opt/OV/prg_samples/eagent/num_widgets $i $c $o $s
- 引数の確認
- num_widgets 15.2.3.149 public 1.3.6.4.4242.3.1 Gauge
All Rights Reserved. Copyright (C) 2009, 2010, Hitachi, Ltd.
Copyright (C) 1993-1998, Hewlett-Packard Company
Copyright (C) 1989-2006, SNMP Research International, Incorporated