4. 部品オブジェクトの使用方法
4.2 実行部品
4.2.3 単位ジョブ間で情報を引き継ぐ
(1) 後続ジョブへのパラメータ引き継ぎ(変数継承)
同一ルートジョブネットワーク内であれば、フロー上の任意の単位ジョブ、任意のサブジョブネッ トワーク内の単位ジョブの間で、変数継承機能により環境変数の値を引き継ぐことができます。引 き継ぐ値は単位ジョブの「出力結果」または「エラー出力結果」に特定のフォーマットで出力し、
JobCenter に引き継ぐ値であることを認識させる必要があります。この値は後続のすべての単位
ジョブの環境変数に設定されます。
① [単位ジョブパラメータの設定]ダイアログの[結果]タブで、変数継承を「STDOUT」ま たは「STDERR」に設定します。「STDOUT」を選択すると単位ジョブの「出力結果」タブの 情報を参照し、「STDERR」を選択すると単位ジョブの「エラー出力結果」タブの情報を参照 します。
② 単位ジョブの「出力結果」(または「エラー出力結果」)から、次の形式で出力されている部分 を選択して読み取ります。
EXPORTVAR VAR1=VAL1 VAR2=VAL2 VAR3=
VAR4 VAR5:VAL5 EXPORTVAR
③ 上記の最初のEXPORTVAR 行の次の行から再度EXPORTVARが現れるまでの間の行につい て、「VAR=value」の形式の行を「環境変数VARにvalueを設定する」と解釈して後続の単位 ジョブに引き継ぎます。上記の例ですと、後続の単位ジョブでは環境変数VAR1には「VAL1」
という値が、VAR2には「VAL2」という値が設定され、VAR3にはNULL値が設定されて引き 継がれます。環境変数VAR4は後続の単位ジョブでは削除されます。また、VAR5:VAL5の行 は形式が異なるため解釈されません。
④ 次のようにEXPORTVARが複数回出力されている場合、奇数個目のEXPORTVAR~偶数個目
のEXPORTVARではさまれた行が解釈の対象になります。
EXPORTVAR VAR1=VAL1 EXPORTVAR VAR2=VAL2 EXPORTVAR VAR3=VAL3 EXPORTVAR
上記の場合、VAR1とVAR3について値が引き継がれ、VAR2については無視されます。なお 最後の偶数個目のEXPORTVARが無い場合は、最後の奇数個目の EXPORTVAR以下の行が 全て解釈の対象となります。
使用例(UNIX)
JOB1のパラメータで[結果]タブの変数継承を「STDOUT」に設定し、後続のJOB2で参照する。
JOB1のスクリプト ...
echo EXPORTVAR echo VAR1=12345 echo VAR2=321 echo EXPORTVAR
JOB1の「出力結果」タブ ...
EXPORTVAR VAR1=12345 VAR2=321 EXPORTVAR
JOB2のスクリプト env | grep VAR
JOB2の「出力結果」タブ ...
VAR1=12345 VAR2=321 ...
使用例(Windows)
JOB1のパラメータで[結果]タブの変数継承を「STDOUT」に設定し、後続のJOB2で参照する。
JOB1のスクリプト ...
echo off
@echo EXPORTVAR
@echo VAR1=12345
@echo VAR2=321
@echo EXPORTVAR
JOB1の「出力結果」タブ ...
EXPORTVAR VAR1=12345 VAR2=321 EXPORTVAR
JOB2のスクリプト echo %VAR1%
echo %VAR2%
JOB2の「出力結果」タブ 12345
321
(2) ジョブ別パラメータ
変数継承機能により先行単位ジョブから環境変数の値を設定できますが、さらに環境変数
NSJNW_PARAMに関しては単位ジョブごとに異なる値を設定できます。この場合は引き継ぐ値
を「NSJNW_PARAM(ジョブ識別子)=値」の形式で指定します。
異なる複数の単位ジョブに異なる値を引き継ぐ指定は、複数行を使って指定します。ジョブ識別 子には単位ジョブ名、サブジョブネットワーク名、またはそれらを「: (コロン)」で連結したもの を指定します。
これらの識別子に単位ジョブの階層パスの一部が一致した場合に、その単位ジョブのパラメータ と認識されます。
複数の識別子が一致した場合にはEXPORTVAR出力中で最後に一致した値を使用します。
使用例(UNIX)
JOB1の「出力結果」タブ EXPORTVAR
NSJNW_PARAM(JOB2)=123 NSJNW_PARAM(SUBJNW1)=67 89
NSJNW_PARAM(SUBJNW1:JOB2)="aa bb"
EXPORTVAR
後続のJOB2に引き継がれた値 NSJNW_PARAM=123
後続のSUBJNW1のJOB1,JOB3,JOB4…に引き継がれた値 NSJNW_PARAM=67 89
後続のSUBJNW1のJOB2のみに引き継がれた値
NSJNW_PARAM="aa bb"
単位ジョブ間の変数継承の注意事項
EXPORTVARを記述する先行単位ジョブは正常終了している必要があります。異常終
了した場合、変数継承は行なわれませんので注意してください。
EXPORTVAR~EXPORTVAR の間で処理が止まったりしないように単位ジョブスク
リプトの処理を記述してください。もし不完全な形式で「出力結果」(または「エラー 出力結果」)に出力されると正しく解釈できず、思わぬ値が引き継がれたり、引き継が れなかったりする可能性があります。特に daemon.conf で NQSDAEMON_OPT に
trkappend=ON が設定されている場合は注意してください。(「環境構築ガイド」
「5.2.1(2) NQSDAEMON_OPT」を参照)
EXPORTVAR~EXPORTVAR の出力行は単位ジョブの「出力結果」(または「エラー
出力結果」)に最終的に記録されたものが解釈されるため、単位ジョブスクリプトに直 接echo文で記述するほか、ユーザコマンドやシェル/バッチスクリプトの出力でも解 釈可能です。
LANG, HOME, LOGNAME, USER, TZ, ENVIRONMENTQSUB, NSJNWで始まる変数 名は使用できません。ただし、NSJNW_PARAMは設定できます。
「標準出力先」や「標準エラー出力先」を任意のファイルに変更した場合は値を引き 継げません。単位ジョブパラメータの「変数継承」を適切に設定し、出力先ファイル
を設定していない方の出力先に対して値を出力するようにしてください。(「4.2.2 単 位ジョブの実行条件(パラメータ)を設定する (3)[結果]タブ」を参照)
ジョブネットワークに親子関係がある場合、同一ルートジョブネットワークの範囲内 では、同じ変数名を使用できません。もし同一変数名を使用した場合は、後から変数 継承を設定した値で上書きされます。
「出力先」「エラー出力先」に改行以外のコントロールコード、またはユーザ設定と 異なる漢字コードが含まれた場合には正常に動作しません。
先行単位ジョブ内で設定した変数を後続単位ジョブ内で変更している場合、その中間 からトラッカを再実行しても変数は元に戻らず、後続単位ジョブが変更した値のまま となります。
Windows 版で変数継承を行う場合は、不要なコマンド行が出力結果(またはエラー出
力結果)に出力されないよう、最初のecho EXPORTVAR行の前に必ずecho offを設定 してください。
EXPORTVARで引き継ぐ環境変数名の長さは最大51バイトまでです。
「変数名=値」の出力結果として許容される1行のサイズは最大1023バイトまでです。
環境変数の個数・合計サイズにはOS環境によって制限があります。詳細は「環境構 築ガイド 14. ジョブ実行時の環境変数の取り扱い」を参照ください。