ジョブスケジューラに登録してあるジョブが終了した場合に呼び出される、出口プログラムについて説明します。
【Windows版】
jobexit.bat、jobexit.exeの順に出口プログラムが検索され、見つかった出口プログラムが呼び出されます。jobexit.batが見つかった場合、jobexit.exeが存在しても呼び出されません。
利用者がこれらの出口を利用して、独自の処理を行いたい場合は、同名の出口プログラムを作成して、以下のディレクトリに格納してください。
Systemwalkerインストールディレクトリ\MpWalker.JM\bin |
【UNIX版】
jobsch.job.exitの出口プログラムが検索され、見つかった出口プログラムが呼び出されます。
利用者がこれらの出口を利用して、独自の処理を行いたい場合は、同名の出口プログラムを作成して、以下のディレクトリに格納してください。
Solaris/Linux版:
/opt/FJSVJOBSC/bin |
HP-UX版:
/opt/FHPJOBSCH/bin |
AIX版:
/usr/FAIXJOBSC/bin |
出口プログラムには、実行権が設定されている必要があります。実行権が設定されていないと呼び出されません。
出口プログラムに渡されるパラメタ
出口プログラムに渡されるパラメタは、以下のとおりです。
argc : パラメタの数(5) (注1) |
Systemwalker Operation Manager EEの場合、パラメタの数は6になります。
Systemwalker Operation Manager EEのパラメタです。
一時ファイルには、ジョブ情報が以下のように格納されます。
ジョブ名 |
上図の各情報について説明します。
実行属性によって、以下の内容が格納されます。
ジョブとして子ジョブネットが登録されている場合、子ジョブネットのジョブネット名が格納されます。
ジョブとしてリンクジョブネットが登録されている場合、リンクジョブネットのジョブネット名が格納されます。
ジョブ名です。ジョブ名が省略されている場合は、コマンド名です。
ジョブのワークユニット名です。
ジョブのワークユニット名です。
コマンド名です。
ジョブの終了コード(0~256までの文字)です。
ジョブの状態を以下の4つのうちいずれかの文字列で表します。
正常終了したことを示します。
疑似正常終了したことを示します。
異常終了したことを示します。
強制終了したことを示します。
一時ファイルは、以下のディレクトリに作成されます。
ジョブスケジューラのデータベースディレクトリ配下のworkディレクトリ。ファイル名はJOBnnn.tmp (nnnはシステムが付加)の形式で作成されます。
/var/tmpディレクトリ
/tmpディレクトリ
一時ファイルは、ジョブスケジューラ側では削除しないので、出口プログラムで削除する必要があります。出口が登録されていない場合は、一時ファイルは作成されません。
パス状態のジョブについて
先行ジョブの終了コードによる後続ジョブの起動条件を指定している場合に、パス状態で終了したジョブは、ジョブ終了出口が起動されません。
また、OR条件で待ち合わせている場合に、後続ジョブのOR条件により強制終了されたジョブは、以下のようになります。
起動されてから強制終了されたジョブは、ジョブの状態は強制終了(canceled)、終了コードは248または249になります。
起動されずに強制終了されたジョブは、ジョブ終了出口が起動されません。
注意事項
ジョブネットやグループの実行が遅延する可能性があるため、時間のかかる処理は行わないでください。
Windows版の場合、出口の実行ユーザは、ジョブスケジューラサービスのログオンアカウントです。【Windows版】
UNIX版の場合、出口の実行ユーザは、“root”となります。【UNIX版】
プログラム例
ジョブ終了出口のプログラム例を以下に示します。
Windows版の例
/* ジョブ終了時に、"KANRI"サーバに以下のメッセージを送信する
ジョブ名 is ended !! code = 終了コード
*/
#include <stdio.h>
#include <string.h>
#include <process.h>
main(int argc, char *argv[])
{
FILE *fp;
char jobname[100];
char jobcode[100];
char cmdline[256];
errno_t err;
err = fopen_s(&fp,argv[4], "r");
fgets(jobname, 99, fp);
jobname[strlen(jobname)] = '\0';
fgets(jobcode, 99, fp);
jobcode[strlen(jobcode)] = '\0';
fclose(fp);
sprintf_s(cmdline,sizeof(cmdline),
"NET SEND KANRI %s is ended !! code = %s",
jobname, //ジョブ名
jobcode); //終了コード
system(cmdline);
_unlink(argv[4]); // temp ファイルを削除
exit(0);
}Solaris版の例
/*
コンソールに、ジョブが終了したというメッセージが、ジョブ名および
終了コードと共に出力される、ジョブ終了出口のプログラム例(Solaris版)
*/
#include <syslog.h>
#include <stdio.h>
main(int argc, char **argv)
{
FILE *fp;
char jobname[100];
char jobcode[100];
memset(jobname, 0x00, sizeof(jobname));
memset(jobcode, 0x00, sizeof(jobcode));
fp = fopen(argv[4], "r");
fgets(jobname, sizeof(jobname), fp);
jobname[strlen(jobname)-1] = '\0';
fgets(jobcode, sizeof(jobcode), fp);
jobcode[strlen(jobcode)-1] = '\0';
fclose(fp);
openlog("jobsch", LOG_CONS, LOG_USER);
syslog(LOG_WARNING,
"WARNING: job end. project=%s, net_name=%s, net_comment=%s, job_name=%s, job_code=%s",
argv[1], argv[2], argv[3], jobname, jobcode);
closelog();
unlink(argv[4]);
exit(0);
}