IBM i にジョブが残ってエミュレーターで再接続できません!
Question
弊社では個々のユーザーにワークステーションIDを割り振っています。
よくある話だとは思いますが、何某かの原因でネットが切断されてしまう際に、IBM i ((AS/400)に繋げていた対話ジョブが残留してしまい、すぐの再接続が出来ない事象が発生します。
その際にシステム管理者である私に連絡が来て対応に迫られます。
WRKACTJOBから対象のユーザーを特定してENDJOBを実行するだけですが、日に何度も対応の依頼が来る事もあり、手間を減らしたいと考えています。
何某か、セッションを切断してしまったユーザーから、対話ジョブの終了をする手法は無いでしょうか。
Answer
一時的なネット障害等でエミュレーター接続が切断され、再接続しようとしても、元のジョブに紐づかず接続が弾かれてしまう。
あるあるですね。
ネットワーク環境の問題であれば、TELNET属性の値の調整という方法もありますが、今回はあくまでシステム上に残ってしまったジョブを終了したいということかと思います。
これからご紹介する手法はジョブを終了させる操作になるため、ユーザーにジョブの制御権限を持たせてしまうとほかのジョブの操作もできてしまい、いたずらし放題になってしまいます。
本来、管理者に都度相談する方がいいかもしれませんが技術的には可能であることをご確認いただく為、手順をご紹介します。
例えばFTPのRCMDでENDJOBを実行する等の手法があります。
ジョブの終了にはジョブ名、ユーザー、番号の3つが分かっている必要があります。
この3つの組み合わせをもって、対象のジョブであると一意に定まるからです。
WRKACTJOBから特定jobのOPT欄に4=終了を入れた場合、ENDJOBする際にはジョブ名、ユーザー、番号が以下のように入力された状態になっています。

つまり、コマンドでENDJOBしたいときには、画面例でいう、ジョブ名PANDA_DEVと、ユーザーPANDA320、番号816901がそろわないといけません。
しかし今回は画面セッションが接続できないので、そもそもWRKACTJOBやWRKJOB等で、これらの情報が確認出来ない・・・
ジョブ名についてはワークステーションIDを指定しているのであれば、そのワークステーションIDとジョブ名は一致しますし、ユーザーも接続ユーザーのユーザープロファイル名ですから対して問題ではありません。
唯一、ジョブが開始時点でシステムから勝手に割り振られる「番号」が分かりません。
勿論切断してしまう前に意識して見ておけば、分からなくはないですが・・・そんな稀有な事をするユーザーさんはいらっしゃらないでしょう。
実は稼働中のジョブのこれらの情報は別の手段でも確認することができます。
これにはSQLを用います。今回はACSの「SQLの実行」にて確認をしてみましょう。
細かいことは抜きにして、以下のSQLを実行してみてください。
SELECT SUBSTR(JOB_NAME,1,6) AS JOB_NUMBER,
SUBSTR(JOB_NAME,8,POSSTR(SUBSTR(JOB_NAME,8),'/')-1) AS JOB_USER,
SUBSTR(SUBSTR(JOB_NAME,8),POSSTR(SUBSTR(JOB_NAME,8),'/')+1) AS JOB_NAME
FROM TABLE (QSYS2.ACTIVE_JOB_INFO()) AS X
WHERE SUBSYSTEM='QINTER';
実行しますと以下のように稼働中のジョブのジョブ番号、ユーザー、ジョブ名が確認できます。

先に確認したユーザーPANDAのジョブが確認できましたね。
これにより自身のワークステーションIDと同一のものを確認いただき番号とユーザー名を控えることで、FTPでENDJOBを実行する準備が整います。
後はWindowsのDOSプロンプトを開いていただき
FTP xxx.xxx.xxx.xxx ※xxxはIBM i のIPアドレスを指定
USER
PASS
上記実行後、FTPによる接続が出来た旨メッセージが表示されましたら、
QUOTE RCMD ENDJOB JOB(番号/ユーザー名/JOB) OPTION(*IMMED)
を実行いただく事で、切断後、残り続けてしまっている状態のジョブを終了することができます。
Windows側の制御のやりようによっては自動化も出来るかもしれませんが、今回は割愛させていただきます。
by . 大熊猫橋