9.4.4 コマンド実行の管理
JP1/IMで次のコマンド実行をするときは,JP1/Baseのコマンド実行機能によって制御します。
-
JP1/IM - Viewの[コマンド実行]画面からのコマンド実行
-
自動アクションによるコマンド実行
ここでは,コマンド実行機能について説明します。
- 〈この項の構成〉
(1) コマンド実行
JP1/IMでコマンド実行をするとき,マネージャーでJP1/IMからJP1/Baseのコマンド実行機能に,コマンド実行を指示します。コマンド実行機能は,実行先として指定されたエージェントへコマンド実行指示を送り,コマンドを実行します。
JP1/IM - Viewからのコマンド実行と,自動アクションによるコマンド実行は,どちらもコマンド実行機能が処理をします。ただし,コマンドを実行するときの制御方法が,キューイングするかしないかの違いがあります。
図のように,JP1/IM - Viewからコマンド実行をした場合は,キューイングせずにそのままコマンドを実行します。複数のコマンドを実行要求すると,特に実行順序や同時実行数を制御せずに,そのまま実行します。
自動アクションによるコマンド実行の場合は,コマンドの実行要求を"コマンド先行入力数"までキューイングして,"コマンド同時実行数"で設定した以上のコマンドを実行しないように制御します。
コマンド実行の処理を,図中の番号に従って説明します。
-
コマンド実行をする。
-
JP1/IM - Viewからの操作の場合
JP1/IM - Viewでコマンド実行の操作をすると,ログインしているマネージャーのJP1/IMがコマンド実行指示として受け付けます。そのJP1/IMは,同ホストのJP1/Baseのコマンド実行機能へ,実行指示を渡します。
-
自動アクションの場合
JP1/IMの自動アクション機能が,アクション定義の実行条件で指定したJP1イベントを受信した時にアクションを実行します。このとき,アクション定義にアクションとして定義されたコマンドを,同ホストのJP1/Baseのコマンド実行機能へ,実行指示として渡します。
-
-
マネージャーからエージェントにコマンド実行指示を送信する。
マネージャーのJP1/Baseは,コマンド実行先として指定されたエージェントのJP1/Baseへコマンド実行指示を送信します。送信のあと,実行指示を受け付けたという応答が来るのを監視し,"応答監視時間"に指定した時間以内に応答がない場合は,応答なしのエラーをJP1/IMに返します。
-
エージェントのJP1/Baseが,コマンドを実行する。
エージェントのJP1/Baseのコマンド実行機能が,OSのシェルやcmd.exeによりコマンドを実行します。このとき,実行の要求元によって処理が異なります。
-
JP1/IM - Viewからの操作の場合
実行指示されたコマンドを,そのまま実行します。
-
自動アクションの場合
エージェントのJP1/Baseのコマンド実行制御が,コマンド実行指示をキューにためて,順に実行を開始します。このとき,"コマンド先行入力数"で定義された数までコマンドをキューイングして,最大で"コマンド同時実行数"で定義された数までコマンドを並行して実行します。同時に実行されるコマンド数はコマンドの実行時間や実行環境により変化しますが,"コマンド同時実行数"を超えることはありません(デフォルトは,コマンド同時実行数=1のため一つずつ実行します)。
自動アクションで実行するコマンドの実行時間が長い場合は,シリアル(デフォルト)設定の場合には実行遅延が発生します。このような場合は設定をパラレルに変更することによって,実行遅延を減少できます。
また,自動アクションで実行するコマンドの数が多い場合は,キューにコマンドが蓄積され,実行遅延が発生します。"コマンド先行入力数の閾値"を設定することによって,実行遅延を事前に検知できます(JP1/Base 07-11でサポート)。デフォルトでは,キューにコマンドが10以上蓄積されたときに警告イベントを発行し,0に戻ると回復イベントを発行します。
-
-
エージェントからマネージャーへコマンド実行結果を送信する。
エージェントのJP1/Baseは,コマンド実行の結果(コマンドの出力)をマネージャーのJP1/Baseへ送ります。実行したコマンドが終了すると,実行結果がエージェントのJP1/Baseから,マネージャーのJP1/Baseを経由してJP1/IMに通知されます。
このときにマネージャー上ではコマンド実行履歴ファイルに実行結果が履歴として,「レコード数」で定義された数だけ記録されます。
この記録されたコマンド実行結果の履歴は,JP1/IM - Viewから操作した場合は[コマンド実行]画面に表示され,自動アクションの場合は[アクション結果詳細]画面で確認できます。
説明中の「応答監視時間」「コマンド先行入力数」「コマンド同時実行数」「コマンド先行入力数の閾値」などは,コマンド実行機能のパラメーターです。これはjcocmddefコマンドで調整できます。
なお,このときの処理の流れを「4.19.3 JP1/IM - Viewから管理対象ホストへのコマンド実行」および「6. 自動アクションによるコマンド実行(JP1/Base連携)」で説明しています。あわせて参照してください。
(2) コマンド実行をするユーザー
エージェントのOS環境でコマンドを実行するには,OSユーザーの権限が必要です。
このため,コマンドを実行するとき,エージェントで,JP1ユーザーに対応するOSユーザーにユーザーマッピングをして,OSユーザー権限でコマンドを実行します。
なお,実行先ホストがWindowsの場合は,ユーザーマッピングされるOSユーザーにWindows特有のユーザー権利が与えられている必要があります。ユーザーマッピングされるOSユーザーに必要なユーザー権利については,マニュアル「JP1/Base 運用ガイド」のOSユーザーにユーザー権利を与えることを説明している章を参照してください。
コマンド実行機能は,次のJP1ユーザーで,エージェントのコマンド実行機能にコマンド実行を指示します。
-
JP1/IM - Viewからの操作の場合
JP1/IM - ViewにログインしているJP1ユーザー
-
自動アクションの場合
最も優先順位の高い定義で指定されたJP1ユーザー。優先順位は次のとおり。
-
自動アクション定義ファイル(actdef.conf)(互換用)の"u=",または自動アクション定義ファイル(actdef.conf)のusrで指定したJP1ユーザー
-
自動アクション環境定義ファイル(action.conf.update)で設定した共通定義情報の"ACTIONEXECUSER"のJP1ユーザー
-
jp1admin
-
このJP1ユーザーを,コマンド実行先のエージェントで,ユーザーマッピングに定義されたOSユーザーに変換して,コマンドを実行します。
(3) OSでのコマンド実行
JP1/Baseのコマンド実行機能は,JP1/IM - Viewや自動アクション機能から要求されたコマンドを,次のようにしてOSにより実行します。
(a) コマンドの実行ユーザー
JP1ユーザーにユーザーマッピングされているOSユーザーで,コマンドを実行します。
(b) コマンドの実行方法
コマンド実行機能は,次の処理によりコマンドを実行します。
-
Windowsの場合
「cmd.exe /c 実行コマンド」をコマンド実行機能により実行します。
-
UNIXの場合
OSユーザーのログインシェルを使って,例えば「/bin/sh -c 実行コマンド」(ログインシェルが/bin/shの場合)をコマンド実行機能から実行します。
なお,実行コマンドが子プロセスを生成するようなコマンドだった場合,JP1/Baseはその生成された子プロセスが終了するまで次の処理に進まなくなります(コマンド実行管理でのコマンドの実行状態は実行中のままとなります)。
(c) コマンドを実行するときの環境
コマンドは,次の環境により実行します。
-
環境変数
JP1/Baseの「環境変数ファイル」により,コマンド実行時の環境変数を指定できます。環境変数ファイルは,JP1/IM - Viewの[コマンド実行]画面または自動アクションの定義ファイル(actdef.conf)により指定します。環境変数ファイルについては,マニュアル「JP1/Base 運用ガイド」の「環境変数ファイル」を説明している章を参照してください。
環境変数ファイルを指定しない場合は,次の環境変数が使われます。
-
Windowsの場合
Windowsのシステム環境変数が,コマンド実行時の環境変数として使われます。
-
UNIXの場合
コマンド実行機能のプロセスの環境変数(jbs_startなどのJP1/Base起動コマンドの中で指定している環境変数)が,コマンド実行時の環境変数として使われます。OSユーザーのプロファイルは読み込まれません。
-
-
OSユーザーのプロファイル(Windows限定)
コマンド実行先ホストでコマンドを実行する際に,OSユーザーのプロファイルを読み込んで実行できます。プロファイルの読み込みをする場合は,jcocmddefコマンドの-loaduserprofileオプションでOSユーザーのプロファイルの読み込みを有効にしてください(デフォルトでは無効です)。
- 重要
-
コマンドを実行するには,そのコマンドを正常に実行できる環境が必要です。例えば,次のことを注意してください。
-
コマンドを実行するには,コマンドごとにメモリーなどOSのリソースが必要です。同時に多数のコマンドを実行すると,OSでリソース不足が発生する場合があります。例えばWindowsでリソース不足が発生すると「CMD.exe - DLL初期化の失敗」ダイアログボックスが表示されます。
この場合は,同時に実行するコマンド数を調整し,リソース不足を解消してください。
-
2バイトコードの処理をするコマンドやシェルスクリプトを実行する場合は,適切な言語コードを環境変数に設定し,2バイトコードに対応したシェル,例えばCシェルなどを使用してください。
-
「cmd.exe /c 実行コマンド」や「シェル -c 実行コマンド」で実行できないコマンドは,JP1/Baseのコマンド実行機能でも実行できません。
-
OSユーザーのログインシェルがCシェルの場合,自動アクションのタイミングでCシェルを使用します。
-
Windowsでは,「サービスとしてログオン」のユーザー権利を使用してOSユーザーの権限を取得しているため,コマンドの実行時にUACは有効になりません。環境移行などで,以前のWindows環境で動作していたユーザーアプリケーションを使用する場合は十分な動作確認を行ってください。
-
Windowsでは,コマンド実行機能のカレントフォルダはインストール先フォルダ\COMMANDで,変更はできません。実行するコマンドのカレントフォルダを変更したい場合は,バッチファイルなどを使用し,そのバッチファイル内でフォルダを変更してからコマンドを実行してください。
-
(d) コマンドの実行結果
コマンド実行制御により実行したコマンドの実行結果は次のようになります。
- コマンドの実行結果の出力
-
コマンドの実行結果の出力(メッセージなど)は,マネージャーのコマンド実行制御が持つコマンド実行履歴ファイルに記録※されます。この記録されたコマンド実行結果の履歴は,JP1/IM - Viewから操作した場合は[コマンド実行]画面に表示され,自動アクションの場合は[アクション結果詳細]画面で確認できます。
複数のコマンドを実行する場合は,コマンド実行順序と,コマンドの実行結果が出力される順序が異なる場合があります。これは,コマンドごとの実行所要時間や,複数ホストでコマンドを実行する場合にホストごとの性能や負荷の違い,および通信エラーが発生した場合のリトライなどによって,影響を受けるためです。
- 注※
-
JP1/IM - Viewからのコマンドの実行結果および自動アクションによるコマンドの実行結果は,JP1/Baseの設定を変更することで,コマンド実行履歴ファイルへの出力を抑止できます。抑止方法には,転送データ量の抑止および詳細情報の登録抑止があります。転送データ量の抑止および詳細情報の登録抑止は,jcocmddefコマンドで設定します。必要に応じて使い分けてください。
-
転送データ量の抑止
コマンド実行先ホストからマネージャーに転送されるデータ量の上限を設定(行数指定)し,転送されるコマンド実行結果のデータ量を抑止できます。転送データ量を抑止することで,コマンド実行履歴ファイルのデータ量を抑えたり,ホスト間の通信回線の混雑を防いだりできます。
転送データ量の抑止は,JP1/IM - Viewからのコマンドの実行結果および自動アクションによるコマンドの実行結果に対して,それぞれ設定できます。
なお,バージョン8のJP1/Baseを新規インストールした場合,転送されるデータ量は最大1,000行に抑止される設定になっています。
-
詳細情報の登録抑止(自動アクション限定)
自動アクションのコマンド実行結果のうち,詳細情報(メッセージ情報)の登録を抑止し,実行結果の成否だけを登録できます。詳細情報の登録を抑止することで,JP1/Base制御部の処理速度を向上させられます(JP1/Base制御部の処理速度向上分,自動アクションの速度も向上します)。ただし,詳細情報の登録を抑止すると[アクション結果詳細]画面の[メッセージ]に「KAVB2401-I」のメッセージが表示され,詳細情報が表示されなくなります([実行結果]部分は表示されます)。詳細情報を知りたい場合には,設定しないでください(デフォルトは登録抑止しない設定です)。
自動アクションの実行結果は,アクション情報ファイルとコマンド実行履歴ファイルの二つのファイルで管理されています。
アクションとして実行するコマンドが省略された自動アクションの場合,コマンドが実行されないため,コマンド実行履歴ファイルには実行結果が書き込まれません。
アクションが大量に発行された場合,アクション情報ファイルだけがラップするため,コマンド実行履歴ファイルとアクション情報ファイルの実行結果に不整合が生じる場合があります。このような状態になった場合,自動アクションの実行結果として,過去に実行した別の自動アクションの実行結果が表示されることがあります。
このような状況を回避するには,コマンドが省略された自動アクションを定義しないで,echoコマンドなどのシステムに影響を与えないコマンドを定義してください。またコマンドが省略された自動アクションが大量に発行され,過去に実行した別の自動アクションの実行結果が表示される状態になった場合は,コマンド実行履歴ファイルがラップし,アクション情報ファイルとコマンド実行履歴ファイルの不整合が解消されることで現象が解消されます。
-
- コマンドの実行結果(終了コード)
-
コマンドの実行結果(終了コード)は,次のようになります。
-
Windowsの場合
コマンド実行機能に渡される「コマンドを実行したcmd.exeの終了コード」がコマンドの終了コードになります。
-
UNIXの場合
コマンド実行機能に渡される「コマンドを実行したシェルの終了コード」がコマンド実行の終了コードになります。
コマンドを実行するまでの処理でエラー(ユーザーマッピングの失敗,コマンド実行先ホストとの通信のエラーなど)が発生した場合は,コマンドは実行されません。
- 重要
-
コマンドの実行終了後,終了コードが確定されるまでのタイミングによっては,JP1イベントで通知する終了コードが実際の値と異なる場合があります。JP1イベントの通知を受け取ったあとは,[アクション結果詳細]画面でコマンドの実行結果の詳細を確認してください。
-
(4) ホストグループによる複数ホストでのコマンド実行
ホストグループの定義によって,複数のホストをグループとして定義できます。
コマンドを実行するホストの指定には,ホストグループを指定できます。ホストグループに対してコマンド実行すると,1回のコマンド実行指示で,ホストグループに属するすべてのホストでコマンドが実行されます。
ホストグループの定義内容については,ホストグループ定義ファイルについては,マニュアル「JP1/Base 運用ガイド」の「ホストグループ定義ファイル」を説明している章を参照してください。
(5) コマンド実行状態に応じたJP1イベントの発行
コマンド実行開始やコマンド実行終了などの実行状態をJP1イベントとして発行できます。JP1イベントを発行できるのは次の場合です。
-
JP1/IM - Viewからのコマンド実行の場合
コマンドの実行開始,実行終了,実行異常終了
-
自動アクションからのアクション(コマンド)実行の場合
アクションの実行開始,実行終了,実行異常終了,実行失敗(実行要求が失敗)
この機能を有効にすると,JP1イベントによって,コマンドの実行操作をいつ,だれが,どのホストに対して行ったかなどを管理できます。JP1/IM - Viewの[イベントコンソール]画面で表示,監視したいときに利用できます。
JP1イベントの発行については,jcocmddefコマンドで設定します。
なお,JP1/Baseのコマンド実行管理が発行するJP1イベントには,上記の発行設定が必要なもの以外に次のようなものがあります。
-
コマンドの実行開始から終了までの経過時間を契機に発行されるJP1イベント
07-10のJP1/Baseでサポートされた機能で,コマンドの実行開始後,一定時間経過しても終了しないコマンドがあったときに発行されます。このJP1イベントは,JP1/IM - Viewや自動アクションで実行したコマンドが,不本意に長時間実行していないか,また,ハングアップしていないかを検知するのに役立ちます。
デフォルトでは10分経過ごとに発行される設定となっており,jcocmddefコマンドで設定を変更できます。
-
コマンド先行入力数の閾値を超えた場合に発行されるJP1イベント
07-11のJP1/Baseでサポートされた機能で,自動アクションで実行したコマンドがキューに一定以上蓄積されたとき,また,その状態から回復したときに発行されます。このJP1イベントは,自動アクションで実行するコマンドが大量に発生した場合に,実行遅延を事前に検知でき,また,実行遅延の状態の回復を知ることができます。
デフォルトでは,キューにコマンドが10以上蓄積されたときに警告イベントが発行され,0に戻ると回復イベントが発行される設定になっています。jcocmddefコマンドで設定を変更できます。
(6) トラブルシューティング用コマンド
JP1/IMから実行指示を受け,JP1/Baseのコマンド実行管理でコマンドを実行する場合,次のようなトラブルが発生することがあります。
-
JP1/IM - Viewから実行できないコマンド(「4.19.3(1) 実行できるコマンド」を参照)を誤って実行してしまい,コマンドが実行中のまま終了しなくなった。
-
システム設計時の想定以上に自動アクションが発生し,不要なアクションが大量にキューに蓄積されてしまった。
-
自動アクションで実行したコマンドがハングアップまたは想定以上に時間が掛かったため,後続のコマンド(アクション)が実行されなくなった。
上記のようなトラブルが発生したときに,速やかに障害復旧できるよう,JP1/Baseではコマンドの状態確認コマンド(jcocmdshowコマンド),削除コマンド(jcocmddelコマンド)を提供しています※。
- 注※
-
JP1/IMには,自動アクションによるコマンド実行で障害が発生したときに,自動アクションをキャンセルする機能があります。通常,自動アクションのコマンド実行で障害が発生した場合には,JP1/IMの自動アクションキャンセル機能を使用してください(詳細については,「6.7 自動アクションのキャンセル」参照)。
図9‒16 jcocmdshowコマンド,jcocmddelコマンドの概要
jcocmdshowコマンドを実行すると,次の表の情報が表示されます。これらの情報を基に,削除が必要と思われるコマンドを判断し,jcocmddelコマンドで削除します。
表示項目 |
説明 |
---|---|
ID |
コマンド実行管理内で実行中,キューイング中のコマンドに付けられるユニークなIDです。 このIDをキーにjcocmddelコマンドでコマンドを削除します。 |
STATUS |
コマンド実行管理内でのコマンドの実行状態が表示されます。実行状態は,実行中,キューイング中,どちらかです。 |
TYPE |
コマンド実行指示をした機能名が表示されます。機能名は,JP1/IM - View,自動アクション,どちらかです。 |
USER |
コマンド実行指示をしたJP1ユーザー名が表示されます。 |
STIME |
コマンド実行指示をコマンド実行管理がJP1/IMから受信した時間です。 |
ETIME |
コマンド実行開始からの経過時間です。 |
COMMAND |
実行中またはキューイング中のコマンド名が表示されます。 |
なお,jcocmdshowコマンドおよびjcocmddelコマンドは,JP1/Baseが提供する機能です。トラブルが発生したホストのJP1/Baseのバージョンによっては,この機能が提供されていない場合があります。詳細は,マニュアル「JP1/Base 運用ガイド」を参照してください。
これらのコマンドは,下記三つの方法で実行できます。
-
JP1/IM - Viewからコマンド実行する。
jcocmddelコマンドを実行する場合は,-fオプションの指定が必要です。
-
マネージャーからエージェントに対しコマンド実行する。
-sオプションの指定が必要です。なお,マネージャーからコマンド実行する場合は,マネージャー上のJP1/Baseのバージョンも07-10以降にする必要があります。
また,マネージャー・エージェント間で直接通信が行われるため,注意が必要です(定義収集・配布機能で使用する通信経路を利用しています)。
-
トラブルが発生したホストで直接コマンド実行する。
コマンドの詳細については,マニュアル「JP1/Base 運用ガイド」のコマンドを説明している章を参照してください。
(7) コマンド実行の条件
JP1/IM - Viewからのコマンド実行や自動アクションによるコマンド実行をするために必要な条件をまとめると,次のようになります。
- JP1/IM - Viewからのコマンド実行の場合
-
-
コマンド実行操作を行えるJP1ユーザーでログインしていること。
コマンド実行操作を行えるJP1ユーザーは,JP1_Console_AdminまたはJP1_Console_Operator権限を持つJP1ユーザーです。
-
コマンド実行先ホストでユーザーマッピング定義がされていること。
ユーザーマッピングの定義は次のようになります。
JP1ユーザー:サーバホスト:OSユーザー
JP1ユーザーにはJP1/IM - Viewを操作しているJP1ユーザー名,サーバホストにはJP1ユーザーがログインしているサーバホスト名,OSユーザーにはコマンド実行先ホストに登録されているユーザー名またはドメインユーザー名。
-
他ホストにコマンド実行する場合は,システムの構成定義が設定されていること。
システム構成の定義をしていない場合は,他ホストに対してJP1/IM - Viewからコマンド実行できません。
-
- マネージャーからの自動アクションによるコマンド実行の場合
-
-
コマンド実行先ホストでユーザーマッピングが定義されていること。
ユーザーマッピングの定義は次のようになります。
JP1ユーザー:サーバホスト:OSユーザー
JP1ユーザーには自動アクションを実行するJP1ユーザー名,サーバホストには自動アクション実行指示を出すサーバホスト名,OSユーザーにはコマンド実行先ホストに登録されているユーザー名またはドメインユーザー名。
-
他ホストに対して自動アクションによるコマンド実行をする場合は,システムの構成定義が設定されていること。
システム構成定義をしていない場合は,他ホストに対して自動アクションによるコマンド実行ができません。
-