2.10.3 SNMP要求時に実行するコマンドの作成
ここでは,/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が実行可能なファイル属性を設定してください。
コマンドの作成手順を次に示します。
操作手順
-
コマンドを実行したいシステムへログインする。
-
スクリプトまたはプログラムを記述する。
-
シェルコマンドの動作を確認する。
-
出口コードをチェックする。
-
シェルコマンドの引数を確認する。
次に,コマンドの作成方法を説明します。
- 〈この項の構成〉
(2) スクリプトまたはプログラムの記述
スクリプトまたはプログラムの記述方法を次に示します。
-
引数
SNMPエージェントがコマンドに引数を渡すには,次の表に示す引数を任意で使用します。記述は順不同です。
非テーブル形式のMIBオブジェクトで,/opt/OV/prg_samples/eagent/num_widgetsコマンドを実行するとき,SNMPエージェントがコマンドにマネージャーのIPアドレス,コミュニティ名,およびオブジェクト識別子の値を渡す例を示します。/etc/SnmpAgent.d/snmpd.extendファイルのDESCRIPTIONフィールドは次のように記述します。
READ-COMMAND: /opt/OV/prg_samples/eagent/num_widgets $i $c $o
また,テーブル形式のMIBオブジェクトで,FILE-NAMEラベルに記述したファイルを読む前に/opt/OV/prg_samples/eagent/update_inetdコマンドを実行するとき,SNMPエージェントがコマンドにリクエストの種類を渡す例を示します。/etc/SnmpAgent.d/snmpd.extendファイルのDESCRIPTIONフィールドは次のように記述します。
FILE-COMMAND: /opt/OV/prg_samples/eagent/update_inetd $r
引数の記述がない場合,SNMPエージェントはREAD-COMMANDラベルおよびFILE-COMMANDラベルに記述したコマンドに引数は渡しません。
SNMPエージェントは,WRITE-COMMANDラベルおよびFILE-COMMANDラベルに記述したコマンドに引数の記述がない場合,リクエスト中のSet値を1つだけ渡します。
-
getおよびsetオペレーションで同じコマンドを使用する場合の引数
READ-COMMANDラベルおよびWRITE-COMMANDラベルに記述する2つのコマンドに同じコマンドを使用したい場合は,コマンドに渡す引数でGetRequestかSetRequestかを区別します。記述する引数を次に示します。
- READ.REQ
-
getオペレーションで使用したい場合
- WRITE.REQ
-
setオペレーションで使用したい場合
/usr/bin/my_commandというコマンドを使用する場合は次のように記述します。
- 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をエラー応答
- SNMPv2cの場合
-
get-requestのとき:マネージャーにnoSuchInstanceをエラー応答
get-next-requestのとき:次のオブジェクトを検索
set-requestのとき:マネージャーにcommitFailedをエラー応答
FILE-COMMANDラベルに記述したコマンドの出口コードは,必ず0で終了してください。0以外の出口コードで終了すると,次のように動作します。
- SNMPv1の場合
-
get-requestのとき:マネージャーにnoSuchNameをエラー応答
get-next-requestのとき:次のオブジェクトを検索
set-requestのとき:マネージャーにgenErrをエラー応答
- SNMPv2cの場合
-
get-requestのとき:マネージャーにnoSuchInstanceをエラー応答
get-next-requestのとき:次のオブジェクトを検索
set-requestで非テーブル型でSetRequest/PostSetRequestのとき:マネージャーにcommitFailedをエラー応答
set-requestでテーブル型でSetRequestのとき:マネージャーにgenErrをエラー応答
set-requestでテーブル型でPostSetRequestのとき:マネージャーにcommitFailedをエラー応答
また,SNMPエージェントがユーザーのシェルコマンドを実行した結果,コマンドがないなどのエラーが発生した場合も,すべて同じ動作をします。