ジョブスケジューラに登録してあるジョブネットが正常終了、疑似正常、異常終了または強制終了した場合に呼び出される、出口プログラムについて説明します。
【Windows版】
ジョブネットが正常終了または疑似正常終了したときは、normalexit.bat、normalexit.exeの順に出口プログラムが検索され、見つかった出口プログラムが呼び出されます。normalexit.batが見つかった場合、normalexit.exeが存在しても呼び出されません。
ジョブネットが異常終了または強制終了したときは、jobschexit.bat、jobschexit.exeの順に出口プログラムが検索され、見つかった出口プログラムが呼び出されます。jobschexit.batが見つかった場合、jobschexit.exeが存在しても呼び出されません。
利用者がこれらの出口を利用して独自の処理を行いたい場合は、同名の出口プログラムを作成して、Systemwalker Operation Managerをインストールしたディレクトリ配下のMpWalker.JM\binディレクトリに格納してください。
【UNIX版】
ジョブネットが正常終了または疑似正常したときは、jobsch.exit.normalの出口プログラムが検索され、見つかった出口プログラムが呼び出されます。
ジョブネットが異常終了または強制終了したときは、jobsch.exitの出口プログラムが検索され、見つかった出口プログラムが呼び出されます。
利用者がこれらの出口を利用して独自の処理を行いたい場合は、同名の出口プログラムを作成して、ジョブスケジューラをインストールしたディレクトリのbinディレクトリに格納してください。
出口プログラムに渡されるパラメタ
出口プログラムに渡されるパラメタは、以下のとおりです。
argc : パラメタの数(7) (注1) |
Systemwalker Operation Manager EEの場合、パラメタの数は8になります。
Systemwalker Operation Manager EEのパラメタです。
一時ファイルには、ジョブネット内の個々のジョブについての情報が、以下のように格納されます。ジョブ名/終了コード/状態がジョブ1個分の情報です。
ジョブ名 |
上図の各情報について説明します。
実行属性によって、以下の内容が格納されます。
ジョブ名です。ジョブ名が省略されている場合は、コマンド名です。
ジョブのワークユニット名です。
ジョブのワークユニット名です。
コマンド名です。
ジョブの終了コード(0~256までの文字)です。未実行のジョブの終了コードは0です。
ジョブの状態を以下の7つのうちいずれかの文字列で表します。
正常終了したことを示します。
疑似正常終了したことを示します。
異常終了したことを示します。
強制終了したことを示します。
未実行であったことを示します。
停止状態であることを示します。
無効状態であることを示します。
一時ファイルは、以下のディレクトリに作成されます。
ジョブスケジューラのデータベースディレクトリ配下のworkディレクトリ。正常終了出口のファイル名はNMLnnn.tmp(nnnはシステムが付加)、異常終了出口のファイル名はNETnnn.tmp(nnnはシステムが付加)の形式で作成されます。
/var/tmpディレクトリ
/tmpディレクトリ
一時ファイルは、ジョブスケジューラ側では削除しないので、出口プログラムで削除する必要があります。
出口が登録されていない場合は、一時ファイルは作成されません。
パス状態のジョブについて
先行ジョブの終了コードによる後続ジョブの起動条件を指定している場合に、パス状態で終了したジョブは、以下のようになります。
ジョブの情報としては、パスされる以前のジョブの状態(実行待ち/無効状態/停止中)が渡ります。
終了コードは0になります。
注意事項
ジョブネットやグループの実行が遅延する可能性があるため、時間のかかる処理は行わないでください。
Windows版の場合、出口の実行ユーザは、ジョブスケジューラサービスのログオンアカウントです。【Windows版】
UNIX版の場合、出口の実行ユーザは、“root”となります。【UNIX版】
出口内で、当該ジョブネットの操作(無効操作、削除操作など)を実施した場合、操作に失敗する場合があります。これは、性能を考慮し、出口呼び出し時点で、ジョブネットの状態が終了状態であることを保証していないためです。出口でジョブネットを操作したい場合は、操作に失敗する場合を考慮し、一定時間リトライするなど考慮してください。
プログラム例
ジョブネット異常終了出口のプログラム例を以下に示します。
Windows版の例
/* ジョブネット異常終了時に、"KANRI”サーバに以下のメッセージを送信する ジョブネット名 is abended !! code = 終了コード*/ #include <stdio.h> #include <process.h> main(int argc, char *argv[]) { char cmdline[256]; sprintf(cmdline, "NET SEND KANRI %s is abended !! code = %s", argv[2], //ジョブネット名 argv[4]); //終了コード system(cmdline); unlink(argv[6]); // temp ファイルを削除 exit(0); }
Solaris版の例
/* コンソールに、ジョブネットが異常終了したというメッセージが ジョブネット名および終了コードと共に出力される、ジョブネット 異常終了出口のプログラム例(Solaris版) */ #include <syslog.h> #include <stdio.h> main(int argc, char **argv) { openlog("jobsch", LOG_CONS, LOG_USER); syslog(LOG_WARNING, "WARNING: jobnet abnormal end. project=%s, net_name=%s, net_comment=%s, net_code=%s", argv[1], argv[2], argv[3], argv[4]); closelog(); unlink(argv[6]); exit(0); }