adshreadコマンド(指定した応答要求メッセージを応答待ちイベントとして発行する)
形式
adshread [-d] 変数名 応答要求メッセージ
機能
指定された応答要求メッセージを応答待ちイベントとして発行します。発行された応答待ちイベントはJP1/IM - Viewに表示され,運用者はJP1/IM - Viewから応答を入力できます。入力された応答は,指定された変数に格納します。
ただし,ユーザー応答機能の入出力先に標準入出力を指定してデバッグ実行した場合,応答要求メッセージを標準出力に表示し,応答を標準入力から受け取ります。
JP1イベントは,前回のJP1イベントの発行時刻から所定の時間(USERREPLY_JP1EVENT_INTERVALパラメーターで指定)が経過するのを待って発行されます。USERREPLY_JP1EVENT_INTERVALパラメーターについては,「7. 環境ファイルで設定するパラメーター」の「USERREPLY_JP1EVENT_INTERVALパラメーター(JP1イベントの最小発行間隔を指定する)」を参照してください。
引数
- -d
-
デバッグ実行時に,応答要求メッセージの出力先を標準出力にし,応答を標準入力から受け取ります。デバッグ実行以外の場合,指定は無視されます。
「-」で始まる文字列は,「-」以外の文字で始まる文字列が出現するまでの間,オプションの指定として扱われます。不当なオプションが指定された場合はオプションエラーとなります。
- 変数名 〜<環境変数名>
-
運用者からの応答内容を格納するシェル変数を指定します。シェル変数は1つしか指定できません。シェル変数を複数指定すると,2つ目以降は応答要求メッセージと解釈されます。
シェル変数が受け取れる文字列は0〜512バイトのASCII文字列です。
ユーザー応答機能の入出力先に標準入出力を指定してデバッグ実行し,標準入力からの応答に513バイト以上の文字列が指定された場合,513バイト以降の文字列は無視されます。また,改行を含む文字列が指定された場合,改行以降の文字列は無視されます。
変数に配列を指定する場合は,要素ごとに指定します。配列の要素数は0〜65,535の間で指定できます。
- 例
-
通常の変数指定:adshread ans“処理を続行しますか(Y/N)”
配列指定:adshread ans[1] “処理を続行しますか(Y/N)”
指定したシェル変数の属性に対する,このコマンドの実行結果を次の表に示します。
指定したシェル変数の属性
コマンドの実行結果
読み取り専用
KNAX6008-Eを出力して終了します。
数値型
KNAX7404-Eを出力して終了します。
文字列型/文字列型の配列
値を更新して終了します。
存在しない変数
文字型の変数を新規作成し,値を設定して終了します。
変数名が不正
KNAX6003-Eを出力し終了します。
配列の要素数が範囲外の変数
KNAX6007-Eを出力し終了します。
JP1/Advanced Shellで使用できないシェル変数
KNAX6002-Eを出力しジョブが強制終了します。
- 応答要求メッセージ 〜<任意文字列>((0〜1,023バイト))
-
応答待ちイベントとして発行する応答要求メッセージを指定します。
応答要求メッセージの文字コードは,同一ホスト内で稼働するJP1/Baseと合わせてください。文字コードが異なると文字化けします。
指定された応答要求メッセージは,コマンド「echo -E 応答要求メッセージ」の実行時と同様の変換内容が応答待ちイベントとして発行されます。複数の応答要求メッセージが指定された場合はエラー(KNAX7403-E)となります。
終了コード
終了コード |
意味 |
対処 |
リトライの可否 |
---|---|---|---|
0 |
正常終了 |
なし。 |
− |
1 |
次に示す続行不可能なエラーが発生
|
変数名として使用できない変数を指定している場合は,変数の指定を変更してください。 問題が解決しない場合は,システム管理者に連絡してください。 |
× |
2 |
セマフォ(Mutex)・共有メモリの操作でエラーが発生 |
メッセージに出力されたエラー情報を基に,「11.4.4 ユーザー応答機能で表示されるエラー情報の意味および対処方法」を参照して対処してください。 |
× |
3 |
共有メモリに空きがない |
USERREPLY_WAIT_MAXCOUNTパラメーターの設定を見直してください。 |
○ |
4 |
JP1イベントの処理中にエラーが発生 |
メッセージに出力されたエラー情報を基に,「11.4.4 ユーザー応答機能で表示されるエラー情報の意味および対処方法」を参照して対処してください。 |
○ |
5 |
JP1イベントの処理中にエラーが発生 |
メッセージに出力されたエラー情報を基に,「11.4.4 ユーザー応答機能で表示されるエラー情報の意味および対処方法」を参照して対処してください。 |
× |
6 |
指定されたホストへのJP1イベントの転送に失敗 |
次の点を確認してください。
|
○ |
7 |
JP1/Baseのライブラリが見つからない |
JP1/Advanced Shellがインストールされているホストに,JP1/Baseがインストールされているか確認してください。 JP1/Baseがインストールされていてこの現象が発生した場合は,JP1/Baseを再インストールしてください。 |
× |
8 |
自ホストのJP1/Baseのイベントサービスの接続に失敗 |
JP1/Advanced Shellがインストールされているホストで,JP1/Baseのイベントサービスが起動しているか確認してください。 |
○ |
10 |
指定された形式が不正 |
コマンドの形式を確認してください。 |
× |
128+シグナル番号【UNIX限定】 |
adshreadコマンドがシグナルを受信して終了 |
ジョブがシグナルを受信して終了していることを確認してください。 |
× |
200【Windows限定】 |
adshreadコマンドが強制終了 |
ジョブが強制終了されていることを確認してください。 |
× |
注意事項
-
このコマンドはバックグラウンド実行しないでください。バックグラウンド実行した場合,流量制御(USERREPLY_JP1EVENT_INTERVALパラメーターで指定)が機能しません。また,運用者からの応答はadshreadコマンドを実行したジョブの指定された変数に格納されません。
-
このコマンドはパイプを指定して実行しないでください。
-
このコマンドにリダイレクトで値を受け取る処理を指定しないでください。
-
ユーザー応答機能の入出力先に標準入出力を指定してデバッグ実行する場合を除いて,JP1/BaseやJP1/IMが存在しない環境やユーザー応答機能管理デーモンまたはサービスが起動していない状態では実行しないでください。
実行すると次の問題が発生します。
-
JP1/Advanced Shellが稼働するホストにJP1/Baseがインストールされていない場合,コマンドはエラー終了します。
-
JP1/Advanced Shellが稼働するホストのJP1/Baseのイベントサービスが稼働していない場合,コマンドはエラー終了します。
-
HOSTNAME_JP1IM_MANAGERで指定されたホストにJP1/Baseがインストールされていない,またはJP1/Baseのイベントサービスが稼働していない場合,コマンドはエラー終了します。
-
HOSTNAME_JP1IM_MANAGERで指定されたホストのJP1/IM - Managerが稼働していない場合でも,HOSTNAME_JP1IM_MANAGERで指定されたホストのJP1/BaseのイベントサービスにJP1イベントが到達した時点でJP1イベントの送信に成功したとしてコマンドは動作します。
-
ユーザー応答機能管理デーモン・サービスが起動していない場合,コマンドはエラー終了します。
-
-
リトライ可能なエラーでコマンドが終了した場合は,そのコマンドを再実行することで成功する可能性があります。コマンドを再実行したい場合は,「3.8.5 adshechoコマンドまたはadshreadコマンドがエラー終了した場合の対処」に記載しているジョブ定義スクリプトの記述例を参考として,そのコマンドを再実行するようにジョブ定義スクリプトを作成してください。
-
adshreadコマンドが応答要求メッセージの応答待ちの状態で,ジョブを「3.11.1 ジョブの強制終了の方法」で示す以外の方法で即時終了した場合,共有メモリ上に応答要求メッセージの情報が残り,JP1/IM - Viewに応答待ちイベントが滞留したままになることがあります。その場合,adshchmsgコマンドの-dオプションで応答要求メッセージの応答待ち状態をキャンセルするか,ユーザー応答機能管理デーモン・サービスを再起動してください。
-
TRAP_ACTION_SIGTERMパラメーターでTERMを指定した場合,またはUNIX版でAUTOを指定してJP1/AJSからジョブを起動した場合は,trapコマンドによる動作定義にadshreadコマンドを指定しないでください。
使用例
-
応答要求メッセージを出力し,運用者からの応答に応じて処理を決定します。
adshread ans "処理を続行しますか(Y/N)" if [ "$ans" = "Y" ] ; then echo "処理を続行します。" elif [ "$ans" = "N" ] ; then echo "処理を終了します。" exit 1 else echo "指定以外の応答が入力されました。処理を終了します。" exit 1 fi