SBMJOBをもう少し詳しく知りたい
Question
SBMJOBコマンドでプログラムを実行すると便利であると、以下の記事を見つけました。(任意のタイミングでバッチジョブを利用する(SBMJOB))
その中で、「QGPL/QBATCHで制限しているため、既に実行中のジョブがあった場合は順番待ち状態になる場合があります。」と記載されていますが、良く解りません。
何か、対応策のようなものはあるのでしょうか。
Answer
いつも、e-bellnetを閲覧して頂いてありがとうございます。
上記の内容はジョブキューとサブシステムとの関係の事になります。
サブシステム記述の設定を確認すると、上記1画面目では、QBATCHでのサブシステムでの最大ジョブ数は*NOMAXになっていますが、2画面目のQBATCHのジョブキューの最大活動は1になっています。
これは、ジョブ待ち行列のヘルプにあるように、
- アクティブ・ジョブの最大数 (MAXACT)
- このジョブ待ち行列から同時にアクティブ状態にできるジョブの最大数を指定します。
ということになりますので、QBATCHのジョブキューからは一つひとつのジョブが入れられていくことになり、前の処理が終わらないと、ジョブキューからサブシステムに投入されることはありません。
これをジョブ待ち行列項目変更 (CHGJOBQE)で変えることは可能ですが、1を複数に変えることで、QBATCHのジョブキューからQBATCHのサブシステムへの単一処理が複数同時処理へと変わります。
ご利用になっているアプリケーションがバッチに投入され、複数同時に稼働しても問題無いかを きちんと確認してから変更の是非を確認してください。
或いは、複数同時に処理をさせたいジョブキューを別途用意するのも回避策として有効ですので、併せてご検討ください。
また、記事には「バッチが無事に終了したかどうかの通知はありません」となっていますが、 知る術はあります。
記事の中にあるような成果物を確認するのも良いのですが、ジョブ終了のメッセージを確認するのも一つの手法です。
対話でサインオンしている場合には、サインオンユーザーに対してのユーザーのメッセージキューが割り当たっています。
通常は通知モードが*NOTIFYになっていますので、これを*BREAKに変えます。
CHGMSGQ MSGQ(*USRPRF) DLVRY(*BREAK)
但し、同じユーザーで複数セッションにサインオンしていて、既に他のセッションで割り当たっているか、*BREAKとなっている場合は、CPF2451の「メッセージ待ち行列 *********** は別のジョブに割り振られている。」のメッセージにより、変更ができません。
その場合、割り当たっているセッションを*HOLDにしてからやり直すか、*BREAKとしで割り当たっているセッションをウオッチするかになります。
CHGMSGQ MSGQ(*USRPRF) DLVRY(*HOLD)
←割り当たっているセッションで実行CHGMSGQ MSGQ(*USRPRF) DLVRY(*BREAK)
←割り当てたいセッションで実行
システムを運用し、管理していくのは結構大変です。
仕事も並列で効率よくやりたくて、自分自身の処理能力を*NOMAXにしたいのですが、何年経っても1のままです。お酒はマルチに頂けるのですが。。。。。。
by けやきのじぃじ