iSeries サーバーをシャットダウンするたびに定期的に実行されるプロセスがあります。次のコマンドを実行します (iSeries 固有ですが、MQSC コマンドが何であるかはわかります)。
RCDMQMIMG OBJ(*ALL) OBJTYPE(*ALL) DSPJRNDTA(*YES)
ENDMQMCSVR MQMNAME(IA001.QUEUE.MANAGER)
ENDMQM MQMNAME(IA001.QUEUE.MANAGER)
DLYJOB DLY(120)
ENDMQMLSR MQMNAME(IA001.QUEUE.MANAGER)
通常は問題なく動作しますが、前回は 6 チャンネル中 5 チャンネルが即時に正常終了し、約 75 秒後に 6 チャンネルが異常終了しました。
チャネル ジョブのログから、次の 2 つのメッセージが連続していました (つまり、間に問題はありませんでした)。
23/07/12 08:26:44.033529 LIBMQMCS_R QMQM *STMT QCMD QSYS 01C8
From module . . . . . . . . : AMQXEIMX_R
From procedure . . . . . . : xcsSendMessage
Statement . . . . . . . . . : 38
Message . . . . : Channel 'IA001.TO.ISPRO' is starting.
Cause . . . . . : Channel 'IA001.TO.ISPRO' is starting. Recovery . . . :
None. Technical Description . . . . . . . . : None.
04/08/12 21:11:28.872098 QWTPITP2 QSYS 061A *EXT *N
Message . . . . : Job ended abnormally.
Cause . . . . . : A SIGKILL signal was received for the job. The action for
the signal was to terminate the job.
ENDMQM は *WAIT を使用してキュー マネージャーが終了するのを待機しないことに注意してください (デフォルトの *CNTRLD が使用されています)。手続きの停止を求めることができた。チャネル ジョブの強制終了は、手動でコードに挿入された 120 秒の遅延内に発生しました (*WAIT を使用する必要があることはわかっていますが、このコードは非常に古いものです)。
おそらく、キュー マネージャーが終了したときにチャネルがメッセージを処理していたと想定するのが妥当だと思います。*CNTRLD オプションには暗黙のタイムアウトがあるようですが、これについてはドキュメントのどこにも記載されていません。それか、他の何かが介入したかのどちらかです。しかし、何?
ENDSBS *ALL が続きましたが、チャネルが停止してから数分後だったことを証明しました。
これが後で作成した興味深いシナリオは、キュー マネージャーが再起動されたときでした。チャネルは既に実行されているというエラーが発行されましたが、チャネル ジョブは通常とまったく同じように表示され、ログに「チャネルの開始」が表示され、実際に実行されています。元気に走っています。
どのような外力が関係している可能性があるか、またはタイムアウトがあるかどうかについての提案は大歓迎です。