ジョブ記述とは
サインオンして、対話型ジョブが開始する、または、SBMJOBでバッチジョブが開始する、そんな中で、そのジョブの環境とか、性質(属性)が、何らかの方法で決まっていきます。このジョブは、システムの上で活動化する具体的な存在です。オブジェクトではありません。ジョブ記述は、一種のテンプレートです。これを元に、OS400は、ジョブを作るのです。
前にも説明しましたように、ジョブは3つのオブジェクトから、その定義内容を取り出し、初期値として設定して、ジョブが成立します。そのオブジェクトとは、
-
*USRPRF 権限関係を規定しています。
-
*CLS
実行優先順位などを規定しています。結構マイナーな存在です。
-
*JOBD
ジョブのほとんどの属性を規定しています。
の3つです。また、この図を出しましょう。大きくて恐縮ですが、とても大事なエッセンスが詰まっているのです。さて、この中で、JOBDはどこにありますか?
ジョブ記述*JOBDは、ユーザープロファイルに指定されていますね。一個のジョブ記述を、たくさんのユーザープロファイルで共有できます。ユーザープロファイルの作成コマンドをちょっと見てみましょう。
ユーザー・プロファイル作成 (CRTUSRPRF)
ユーザー・プロファイル . . . . USRPRF
ユーザー・パスワード . . . . . PASSWORD *USRPRF
パスワードを満了にセット . . . PWDEXP *NO
状況 . . . . . . . . . . . . . STATUS *ENABLED
ユーザー・クラス . . . . . . . USRCLS *USER
援助レベル . . . . . . . . . . ASTLVL *SYSVAL
現行ライブラリー . . . . . . . CURLIB *CRTDFT
呼び出す初期プログラム . . . . INLPGM *NONE
ライブラリー . . . . . . . .
初期メニュー . . . . . . . . . INLMNU MAIN
ライブラリー . . . . . . . . *LIBL
制限機能 . . . . . . . . . . . LMTCPB *NO
テキスト ' 記述 ' . . . . . . . TEXT *BLANK
特殊権限 . . . . . . . . . . . SPCAUT *USRCLS
値の続きは+
特殊環境 . . . . . . . . . . . SPCENV *SYSVAL
サイン・オン情報の表示 . . . . DSPSGNINF *SYSVAL
パスワード満了間隔 . . . . . . PWDEXPITV *SYSVAL
装置セッション限界 . . . . . . LMTDEVSSN *SYSVAL
キーボード緩衝方式 . . . . . . KBDBUF *SYSVAL
最大許容記憶域 . . . . . . . . MAXSTG *NOMAX
最高スケジュール優先順位 . . . PTYLMT 3
ジョブ記述 . . . . . . . . . . JOBD QDFTJOBD
ライブラリー . . . . . . . . *LIBL
グループ・プロファイル . . . . GRPPRF *NONE
所有者 . . . . . . . . . . . . OWNER *USRPRF
グループ権限 . . . . . . . . . GRPAUT *NONE
グループ権限タイプ . . . . . . GRPAUTTYP *PRIVATE
補足グループ . . . . . . . . . SUPGRPPRF *NONE
値の続きは+
会計コード . . . . . . . . . . ACGCDE *BLANK
文書パスワード . . . . . . . . DOCPWD *NONE
メッセージ待ち行列 . . . . . . MSGQ *USRPRF
ライブラリー . . . . . . . .
配布 . . . . . . . . . . . . . DLVRY *NOTIFY
重大度コード・フィルター . . . SEV 0
印刷装置 . . . . . . . . . . . PRTDEV *WRKSTN
出力待ち行列 . . . . . . . . . OUTQ *WRKSTN
ライブラリー . . . . . . . .
アテンション・プログラム . . . ATNPGM *SYSVAL
ライブラリー . . . . . . . .
分類順序 . . . . . . . . . . . SRTSEQ *SYSVAL
ライブラリー . . . . . . . .
言語識別コード . . . . . . . . LANGID *SYSVAL
国別 ID . . . . . . . . . . . . CNTRYID *SYSVAL
コード化文字セット ID . . . . . CCSID *SYSVAL
文字識別コードの制御 . . . . . CHRIDCTL *SYSVAL
ロケール・ジョブ属性 . . . . . SETJOBATR *SYSVAL
値の続きは+
ロケール . . . . . . . . . . . LOCALE *SYSVAL
ユーザー・オプション . . . . . USROPT *NONE
値の続きは+
ユーザー ID 番号 . . . . . . . UID *GEN
グループ ID 番号 . . . . . . . GID *NONE
ホーム・ディレクトリー . . . . HOMEDIR *USRPRF
権限 . . . . . . . . . . . . . AUT *EXCLUDE
|
JOBDの構成要素
さて、ジョブ記述の内容を見てみましょう。
ジョブ記述作成 (CRTJOBD)
ジョブ記述 . . . . . . . . . . JOBD
ライブラリー . . . . . . . . *CURLIB
ジョブ待ち行列 . . . . . . . . JOBQ QBATCH
ライブラリー . . . . . . . . *LIBL
ジョブ優先順位 (JOBQ での ) . . JOBPTY 5
出力優先順位 (OUTQ での ) . . . OUTPTY 5
印刷装置 . . . . . . . . . . . PRTDEV *USRPRF
出力待ち行列 . . . . . . . . . OUTQ *USRPRF
ライブラリー . . . . . . . .
テキスト ' 記述 ' . . . . . . . TEXT *BLANK
ユーザー . . . . . . . . . . . USER *RQD
印刷テキスト . . . . . . . . . PRTTXT *SYSVAL
会計コード . . . . . . . . . . ACGCDE *USRPRF
経路指定データ . . . . . . . . RTGDTA QCMDI
要求データまたはコマンド . . . RQSDTA *NONE
CL 構文検査 . . . . . . . . . SYNTAX *NOCHK
初期ライブラリー・リスト . . . INLLIBL *SYSVAL
値の続きは+
終了重大度 . . . . . . . . . . ENDSEV 30
メッセージのロギング : LOG
レベル . . . . . . . . . . . 4
重大度 . . . . . . . . . . . 0
テキスト . . . . . . . . . . *NOLIST
CL プログラム・コマンド の ログ . . . . LOGCLPGM *NO
QUERY メッセージ応答 . . . . . INQMSGRPY *RQD
ジョブ待ち行列上での保留 . . . HOLD *NO
ジョブ日付 . . . . . . . . . . DATE *SYSVAL
ジョブ・スイッチ . . . . . . . SWS 00000000
装置回復処置 . . . . . . . . . DEVRCYACN *SYSVAL
タイム・スライス終了プール . . TSEPOOL *SYSVAL
権限 . . . . . . . . . . . . . AUT *LIBCRTAUT
ジョブ・メッセージ 待ち行列最大 サイズ JOBMSGQMX *SYSVAL
ジョブ・メッセージ 待ち行列満杯処置 JOBMSGQFL *SYSVAL
マルチ・スレッド使用可能 . . . ALWMLTTHD *NO
|
これは、CRTJOBDの例です。省略値の多さが、このOS400の優れた点ですね。ただし、AがBを参照して、BがAを参照してしまうと、「循環定義」といって、一意に内容が決まらなくなります。したがって、どこかに、他参照を持つことが出来ない記述が有るのですね。大抵は、システム値が多いと思います。システム値そのものは、他を参照することはありません。また、ネットワーク属性もそうです。他のコマンドの省略値として、頻繁に参照されるジョブ記述やユーザープロファイル自身は、特に、*SYSVALが省略値として頻繁に出現していますね。
また、SBMJOBでは、
ジョブ投入 (SBMJOB)
実行するコマンド . . . . . . . CMD
ジョブ名 . . . . . . . . . . . JOB *JOBD
ジョブ記述 . . . . . . . . . . JOBD *USRPRF
ライブラリー . . . . . . . .
ジョブ待ち行列 . . . . . . . . JOBQ *JOBD
ライブラリー . . . . . . . .
ジョブ優先順位 (JOBQ での ) . . JOBPTY *JOBD
出力優先順位 (OUTQ での ) . . . OUTPTY *JOBD
印刷装置 . . . . . . . . . . . PRTDEV *CURRENT
出力待ち行列 . . . . . . . . . OUTQ *CURRENT
ライブラリー . . . . . . . .
ユーザー . . . . . . . . . . . USER *CURRENT
印刷テキスト . . . . . . . . . PRTTXT *CURRENT
経路指定データ . . . . . . . . RTGDTA QCMDB
要求データまたはコマンド . . . RQSDTA *CMD
現行ライブラリー . . . . . . . CURLIB *CURRENT
初期ライブラリー・リスト . . . INLLIBL *CURRENT
値の続きは+
メッセージのロギング : LOG
レベル . . . . . . . . . . . *JOBD
重大度 . . . . . . . . . . . *JOBD
テキスト . . . . . . . . . . *JOBD
CL プログラム・コマンド の ログ . . . . LOGCLPGM *JOBD
QUERY メッセージ応答 . . . . . INQMSGRPY *JOBD
ジョブ待ち行列上での保留 . . . HOLD *JOBD
スケジュール日 . . . . . . . . SCDDATE *CURRENT
スケジュール時刻 . . . . . . . SCDTIME *CURRENT
ジョブ日付 . . . . . . . . . . DATE *JOBD
ジョブ・スイッチ . . . . . . . SWS *JOBD
WRKSBMJOB による表示可能 . . . DSPSBMJOB *YES
メッセージ待ち行列 . . . . . . MSGQ *USRPRF
ライブラリー . . . . . . . .
分類順序 . . . . . . . . . . . SRTSEQ *CURRENT
ライブラリー . . . . . . . .
言語識別コード . . . . . . . . LANGID *CURRENT
国別 ID . . . . . . . . . . . . CNTRYID *CURRENT
コード化文字セット ID . . . . . CCSID *CURRENT
投入 . . . . . . . . . . . . . SBMFOR *CURRENT
ユーザー . . . . . . . . . .
番号 . . . . . . . . . . . .
ジョブ・メッセージ 待ち行列最大 サイズ JOBMSGQMX *JOBD
ジョブ・メッセージ 待ち行列満杯処置 JOBMSGQFL *JOBD
環境変数コピー . . . . . . . . CPYENVVAR *NO
マルチ・スレッド使用可能 . . . ALWMLTTHD *JOBD
|
このように、やはり、*USRPRFの中に指定された*JOBDを使うことになっていますね。この*USRPRFは、このSBMJOBを実行するときのユーザーの*USRPRFです。
このジョブ記述の働きは何でしょう。先ほども言いましたが、これら、*USRPRF,*CLS,*JOBDはすべて、ジョブの生成の為に存在する記述です。まあ、*USRPRFは、ジョブの生成以外にも参照されることが多いのですが、基本的には、ジョブの生成が主たる目的です。特にユーザープロファイルは、AS/400があなたが誰なのかを判断する唯一の手段ですね。それが分からなければ、ジョブもくそもありません。ユーザープロファイルによって、「そうですか、あなたが、xxさんですね。それならば、この環境が「準備」されています。お使い下さい」と、ジョブ記述を参照して、ジョブを作り出すのだ、と思って下さい。
今回は、省略値を説明しませんが、よく見ておいてください。ところで、SBMJOBとCRTJOBDは多くの共通したキーワードが有ると思いませんか?そもそもジョブの生成だけなら、SBMJOBはJOBDを指定すれば、それだけでいいのですが、きっと柔軟性を持たせたいために、SBMJOBでは、多くのJOBDの内容を、変更して実行出来るようにしたのでしょう。SBMJOBの省略値*JOBDは、JOBD(xxxx)で指定したジョブ記述の、同じキーワードの値が使われることを指示していますが、ここに、特別な値を指定することも出来るわけです。
キーワード
さて、CRTJOBDの中で重要なキーワードは、(注 ()内は作成時の省略値)
JOBQ (QBATCH)
OUTQ (*USRPRF)
INLLIBL (*SYSVAL)
JOBPTY (5)
OUTPTY (5)
LOG (4 0 *NOLIST)
LOGCLPGM (*NO)
です。この他、
RTGDTA (QCMDI)
DATE (*SAYSVAL)
SWS (00000000)
INQMSGRPY(*RQD)
も2番目に重要です。
この他の残りは、さして気にしなくてもいいです。もし、AS/400のチューンアップで必要ならば、調べる必要があるかもしれません。
さて、最も大事な第1グループだけ見ていきましょう。この他は、ご自分でお調べください。
JOBQは、大抵、SBMJOBで使われる待ち行列ですね。別のジョブを開始するのに使われます。詳しくはこちらを見て下さい。省略値ではQBATCHという固有名詞になっていますね。つまり、QBATCHというJOBQがオブジェクトとして存在しているのですね。
OUTQは、出力待ち行列ですね。スプールになった印刷データが、プリンターからの印刷の順番待ちをする場所です。詳しくはこちらを見て下さい。ここでは、*USEPRFになっていますね。この場合は、USRPRFキーワードに指定された*USRPRFの中の、OUTQキーワード(*WRKSTNが省略値)になります。
INLLIBLは、サインオンしてジョブが開始した場合のライブラリーリストを指定しています。*SYSVALの場合、システム値のQUSRLIBLの中身が使われます。ライブラリーリストは、柔軟なジョブ環境を作る要素として、とても大事です。多くの人が、このJOBDの中のLIBL以外に、ツールを作成して、ライブラリーリストを制御しているのはそのためですね。
JOBPTYは、実行優先順位ではなくて、JOBQの中での優先順位を意味しています。OUTPTYはOUTQの中の優先順位を意味します。(質問:ジョブの実行優先順位はどこで定義されていますか?...答え:*CLSです。)また、値は、1が最高の優先順位で、9が最低の優先順位です。JOBQの中では、最高の優先順位0が使えます。
バッチジョブ終了時のQPJOBLOGを制御する、LOGにも注意して下さい。LOGは、3つの要素から成り立っています。これをよく見てください。色が違うのが、省略値です。QPJOBLOGに何でも載っていて欲しいならば、LOG(4
0 *SECLVL)です。
レベル |
0 |
データは記録されません。 |
1 |
記録される情報は、ジョブの外部メッセージ待ち行列に送られたメッセー
ジで、指定したメッセージ重大度と同じかまたはそれより大きい重大度を
持つすべてのメッセージだけです。このタイプのメッセージは、ジョブの
開始や終了の日時、および完了時のジョブの状況を示すものです。 |
2 |
ロギング・レベル 1 の情報。
コマンド行に入力した任意の要求、または CL
プログラムからログさ れている任意のコマンド。その
CL プログラムに対しては、指定した
重大度と同じかそれより大きい重大度をもつ高レベル・メッセージが
出されます。要求またはコマンドがログされる場合、それに関するメ
ッセージもすべてログされます。 |
3 |
ロギング・レベル 1 の情報。
CL
プログラムからのログされるすべての要求またはコマンド。
要求またはコマンドに関連する高レベル・メッセージは
1 つでも、
指定した重大度と同じかまたはそれより大きい重大度を持っていれ
ば、その要求またはコマンドに関連するすべてのメッセージがログさ
れます。 |
4 |
CL
プログラムからのログされるすべての要求またはコマンド。
指定した重大度コードと同じかまたはそれより大きい重大度を持つメッセージだけ。 |
重大度 |
00
〜 99 |
ジョブ・ログに記録するエラー・メッセージの最低の重大度を指定します。指定できる値は
0 〜 99
までです。指定した値に等しいかそれより大きい重大度のメッセージがジョブ・ログに記録されます。 |
テキスト |
*MSG |
メッセージ・テキストだけがジョブ・ログに記録されます。(メッセ
ージ・ヘルプは記録されません)。 |
*SECLVL |
第 1 レベルと第 2
レベルの両方のメッセージ・テキストがジョブ・
ログに記録されます。 |
*NOLIST |
ジョブが正常に終了した場合にはジョブ・ログは作成されません。ジ
ョブ終了コードが 20
かまたはそれより大きい場合にはジョブ・ログ
が作成され、第 1 レベルと第 2
レベルの両方のメッセージ・テキス
トが記録されます。 |
LOGCLPGMは、CRTCLPGMのLOGが*JOBになっている場合に、その*JOBが参照するキーワードが、このLOGCLPGMです。これは、CLPのジョブステップをログに出せる指定です。開発中とかで、バッチジョブを見たり、まあ、マシンにゆとりが有るなら、LOGCLPGM(*YES)が役立ちますね。但し、CRTCLPGMで、LOG(*YES)はLOGCLPGMに関係なく、いつでもログに落とします。LOG(*NO)だと、どんな場合でもログに落としません。たとえば、頻繁にCLPをCALLするときに、LOGCLPGMが*YESだと、実行効率が落ちる場合があります。そんなときに、便利なオプションがCRTCLPGMのLOGです。全てのCLPがLOG(*JOB)になっていて、「これは便利だ」と悦に入っているときに、このLOGを書き出すために実行効率が悪いCLPプログラムが一本あるだけで、LOGCLPGMを*NOにしてしまうと、全部のCLPプログラムのログが一斉に見れなくなります。そこで、その一本だけCRTCLPGMのLOGを*NOにしてコンパイルしておけば、その一本だけ、ログを落とすことはなくなります。うまく、組み合わせて、利用しましょう。
以上
2000-2-18 |