JOB의 관리

본 장에서는 JOB이 가질 수 있는 상태와 JOB이 실행되는 단계 및 결과 조회 그리고 JOB을 관리하는 방법에 대해서 설명한다. OpenFrame에서 JOB을 관리하는 방법은 tjesmgr와 OpenFrame Manager 2가지가 있는데 본 안내서에서는 tjesmgr를 사용하여 JOB을 관리하는 방법에 대해서만 다루도록 한다.

OpenFrame Manager를 사용하여 JOB을 관리하는 방법에 대해서는 OpenFrame Manager "사용자 안내서"를 참고한다.

1. JOB 상태

TJES는 다음 그림과 같이 JOB을 START, HOLD, WORKING, SUSPEND, DONE, ERROR, STOP, FLUSH의 8가지 상태로 구분하여 관리한다.

figure 2 1
JOB 상태 흐름도

READY는 SUBMIT 단계를 처리 중인 상태이고, PURGE는 JOB이 TJES에서 제거됨을 의미한다.

다음은 TJES의 각 상태에 관한 설명이다.

상태 내용

START

JCL을 통해 JOB이 submit되어 실행되기 전까지의 상태로서, JOB 스케줄링의 대상이고 아직 Runner Slot에게 할당되지 않은 상태이다.

JOB CLASS를 변경할 수 있고, HOLD 명령을 통해 JOB을 HOLD 상태로 변경하거나 CANCEL 명령을 통해 JOBQ에서 제거할 수 있다.

HOLD

JCL을 통해 JOB이 submit되어 실행되기 전까지의 상태로, START와 다르게 JOB 스케줄링의 대상이 되지 않는다. HOLD 상태에 해당하는 경우는 다음과 같다.

  • JCL에 TYPRUN=HOLD 구문을 기술하여 submit한 경우

  • HOLD로 설정된 JOB CLASS로 submit한 경우

  • START 상태의 JOB을 HOLD 명령을 통해 상태를 변경한 경우

START 명령을 통해 START 상태로 변경하거나 CANCEL 명령을 통해 JOBQ에서 제거할 수 있다.

WORKING

tjclrun이 JOB을 실행 중인 상태이다. 실행 중인 STEP의 특성에 따라 복수의 UNIX 프로세스로 구동될 수 있다. SUSPEND 명령을 통해 실행 중인 JOB을 일시적으로 정지시킬 수 있고, STOP 명령을 통해 JOB 수행을 끝내고 STOP 상태로 바꿀 수 있다.

SUSPEND

JOB의 실행이 일시적으로 멈춘 상태이다. RESUME 명령을 통해 WORKING 상태로 복원할 수 있고, STOP 명령을 통해 JOB 수행을 끝내고 STOP 상태로 바꿀 수 있다.

3rd party 유틸리티를 사용할 경우 유틸리티 내부에서 세션을 새로 설정한다면 해당 프로세스와 그 하위 프로세스는 SUSPEND되지 않는다는 점을 주의해야 한다.

DONE

JCL에 요청된 대로 JOB이 정상적으로 실행된 상태이다.

사용자 프로그램이 의도한 결과를 산출했는지의 여부는 SPOOL 데이터의 조회(PODD)나 각 STEP의 반환 코드(PSJOB) 등을 조회하여 별도로 확인해야 한다. REMOVE 명령을 통해 JOBQ에서 제거할 수 있다.

DONE 상태는 JCL에서 요청된 대로 JOB의 모든 STEP이 수행되었고 반환 코드가 COND 문이나 OpenFrame 환경설정에 rc 서브젝트 등을 통해 지정한 허용 범위이내라는 것을 의미하는 것이지, 각 STEP에 지정된 프러시저나 프로그램이 업무적으로 정상 실행되었다는 것을 의미하는 것은 아니다.

ERROR

JOB의 실행 결과가 COND 문이나 OpenFrame 환경설정에 rc 서브젝트에서 지정한 반환 코드 허용범위를 벗어난 상태이다. REMOVE 명령을 통해 JOBQ에서 제거할 수 있다.

STOP

WORKING 상태의 JOB에 사용자가 명시적으로 STOP 명령을 통해 JOB을 강제 종료시키거나, 장애복구 플랜(Disaster Recovery Plan)에 의해 TJES가 자동으로 재기동될 때 JOB이 강제 종료된 상태이다. 이때 JOB 실행에 필요했던 모든 자원을 반납하고 종료하게 된다. REMOVE 명령을 통해 JOBQ에서 제거할 수 있다.

FLUSH

JOB 수행 중에 tjclrun에서 에러가 발생하여 더 이상 JOB을 수행하지 못하는 상태이다. JCL 런타임 파싱 에러나 DD 할당 에러 등이 FLUSH 상태의 주요 원인이다. REMOVE 명령을 통해 JOBQ에서 제거할 수 있다.

1.1. 명령어를 통한 JOB의 상태 변경

사용자는 명령어를 사용하여 원하는 JOB의 상태로 변경할 수있다.

다음은 JOB의 상태 변경과 관련된 tjesmgr 명령어를 정리한 표이다. 첫 번째 칼럼의 현재 상태에서 두 번째 칼럼의 명령어를 사용하면 3번째 칼럼의 상태로 변경된다.

현재 상태 명령어 변경될 상태

-

RUN

START, HOLD

START

CANCEL

JOB 실행 전 JOBQ에서 해당 JOB 삭제됨

HOLD

HOLD

HOLD

CANCEL

JOB 실행 전 JOBQ에서 해당 JOB 삭제됨

START

START

WORKING

SUSPEND

SUSPEND

STOP

STOP

SUSPEND

STOP

STOP

RESUME

WORKING

DONE

REMOVE

JOB 실행 후 JOBQ에서 해당 JOB 삭제됨

ERROR

REMOVE

JOB 실행 후 JOBQ에서 해당 JOB 삭제됨

STOP

REMOVE

JOB 실행 후 JOBQ에서 해당 JOB 삭제됨

FLUSH

REMOVE

JOB 실행 후 JOBQ에서 해당 JOB 삭제됨

JOBQ는 OpenFrame 환경설정에 tjes 서브젝트, JOBDEF 섹션에 설정된 크기만큼만 저장을 할 수 있기 때문에 필요하지 않는 JOB들은 JOBQ에서 삭제할 필요가 있다.

CANCEL이나 REMOVE는 모두 JOBQ에서 JOB을 삭제하는 명령이지만 CANCEL은 JOB이 실행되기 전에, REMOVE는 JOB이 실행된 후에 삭제된다는 점이 다르다. HOLD 상태에 있는 JOB들은 스케줄링이 되지 않기 때문에 HOLD 상태인 JOB을 실행하고자 하면 START 상태로 상태를 바꾸어야 한다. 이때 START 명령어를 사용하여 상태를 변경할 수 있다.

  1. tjes 서브젝트에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

  2. 각 명령어 사용법은 TJESMGR 명령어를 참조한다.

2. JCL 관리

OpenFrame에서는 기존의 Mainframe에서 사용하던 JCL들을 그대로 가져와서 실행할 수 있다. JCL들을 일반 디렉터리에 관리해도 되지만, OpenFrame 환경설정에 tjes 서브젝트, PROCLIB 섹션의 JCLLIB 키에 등록된 데이터셋의 멤버로 등록하는 것을 권장하며, JCL들이 많다면 별도의 PDS 데이터셋을 생성해서 멤버로 관리하는 것을 권장한다.

OpenFrame에서 PDS 데이터셋은 실제 디렉터리로 만들어져 있기 때문에 해당 볼륨의 PDS 데이터셋 이름 디렉터리에 JCL들을 복사해 놓으면 PDS의 멤버가 된다. JCL들을 PDS 데이터셋의 멤버로 등록해 놓으면 JCL을 submit 할 때 UNIX 전체 파일 경로를 주지 않고도 데이터셋 이름과 멤버명 만으로도 대상 JCL을 찾을 수 있다. JCL이 OpenFrame 환경설정에 tjes 서브젝트, PROCLIB 섹션의 JCLLIB 키에 등록된 데이터셋의 멤버로 등록된 경우에는 멤버명만 있어도 대상 JCL을 찾을 수 있다. JCLLIB에 지정한 PDS 순서대로 해당 데이터셋의 멤버를 검색한다.

tjes 서브젝트의 PROCLIB 섹션에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

3. JOB 처리단계

TJES를 통해 실행되는 모든 JOB은 다음의 단계로 진행된다.

  1. Submit : TJES로부터 JCL을 받아 들이는 단계

  2. Schedule : 조건을 충족하는 Runner Slot에게 JOB을 할당하는 단계

  3. Execution : 실제로 Runner가 JOB을 수행하는 단계

  4. Output : JOB의 수행이 끝나고 그 Output이 처리되는 단계

  5. Remove : 수행이 끝난 JOB을 TJES에서 제거하는 단계

3.1. Submit 단계

Submit 단계는 JCL을 받아 이를 분석하여 JOB 단위로 TJES에 편입시키는 단계이다.

JCL이 submit되면 TJES는 해당 JCL을 분석하여 JOB 엔트리를 구성하고, JOBID, SPOOL 등 JOB 관리에 필요한 리소스를 할당한 후 JOBQ에 저장한다. submit된 JOB의 정보는 스케줄러에 통보되어, 스케줄러에 의해 JOB이 Runner Slot에 할당될 수 있도록 한다.

TJES는 다음과 같은 리소스를 JOB에게 할당한다.

리소스 설명

JOBID

TJES가 JOB을 구분하여 관리하기 위해서는 각각의 JOB에 유일한 ID를 부여해야 한다. 이를 JOBID라 하며, TJES에서 관리하는 JOBID는 'JOBnnnnn' 또는 'J0nnnnnn’의 형식을 갖는다. 이 형식은 OpenFrame 환경설정에 tjes 서브젝트, JOBDEF 섹션의 ENDNUM 키로 결정한다. 앞의 두 가지 형식에 의하여 JOB에 부여할 수 있는 JOBID 범위는 00001부터 99999 또는 000001부터 999999이다.

JOBID는 Submit할 때 발급되어 JOB이 CANCEL이나 REMOVE를 통해 제거될 때 반환된다. 반환된 JOBID는 재사용된다.

이외에 CICS에서 생성하는 'STCnnnnn', TSO에서 생성하는 'TSOnnnnn' 형식의 JOBID가 있으나, 이는 TJES가 관리하지 않는다.

SPOOL

TJES는 한 개의 JOB마다 독립적인 SPOOL 공간을 할당하며, 이 공간은 SPOOL 볼륨에 JOBID로 생성된 디렉터리이다.

SPOOL에는 Submit 받은 시점의 JCL을 보존하기 위하여 복사한 INPJCL, 카탈로그를 복사한 CATPROC, JOB의 수행결과인 SYSOUT, TJES가 JOB의 수행 상태를 보고하기 위해 내부적으로 사용하는 파일 등이 저장된다. 내부적으로 관리하는 파일들은 설정에 따라 시스템 테이블에 저장할 수도 있다.

SPOOL은 tjesinit 툴을 통해 초기화한다.

JOBQ

TJES는 JOB의 검색과 변경 등을 용이하게 하기 위해 시스템테이블에 JOB의 기본 정보를 저장한다.

JOBQ에 저장된 JOB의 정보는 tjesinit 툴을 통해 초기화할 수 있다.

TJES에서 JCL을 submit 받는 단계는 다음과 같다.

  1. JCL 구문 에러를 확인한다. 프러시저의 유무와 구문 오류는 이 시점에서는 확인되지 않고, tjclrun에서 JCL을 파싱할 때 확인된다.

  2. JOBID를 발급한다.

  3. SPOOL을 생성한다.

  4. submit된 JCL을 SPOOL에 INPJCL로 복사한다.

  5. JCL에 기술된 내용 중 JOB에 대한 정보를 JOBQ에 저장한다.

  6. JCL의 JOB 구문에 TYPRUN=HOLD가 기술되거나 OpenFrame 환경설정에 tjes 서브젝트, JOBCLASS 섹션에 특정 CLASS KEY 값이 HOLD 속성이 주어지지 않았다면 obmjschd에게 통보하여 스케줄링한다.

Submit 단계 중에 에러가 발생하면 OpenFrame 환경설정에 ofsys 서브젝트, DIRECTORY 섹션의 LOG_DIR 키에 지정된 경로에 job 하위 디렉터리에 submit_YYYYMMDD.log의 이름으로 파일이 저장된다. 성공적으로 submit된 JOB은 START와 HOLD 상태 중 하나의 상태로 남는다.

tjesmgr의 RUN 명령어를 통해서 JCL을 정상적으로 submit하면, submit하여 생성된 JOB들이 JOBQ에 등록되어 있는 것을 확인할 수 있다.

  1. Submit 로그의 형식에 대한 자세한 내용은 Submit 로그를 참고한다.

  2. JOBQ의 Output에 대한 자세한 내용은 PS(Print Screen)을 참고한다.

  3. ofsys, tjes 서브젝트에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

 

OpenFrame에서는 다음과 같이 JCL을 submit하는 여러 가지 방법을 지원한다.

  • tjesmgr의 RUN 명령어를 통한 방법 (TJESMGR 명령어RUN 참고)

  • textrun 툴을 사용하는 방법(OpenFrame Batch "툴 참조 안내서"의 "textrun" 참고)

  • OpenFrame Manager[Batch] 메뉴를 사용하는 방법("OpenFrame Manager 사용자 안내서"를 참고)

3.2. Schedule 단계

Schedule 단계에서 TJES는 기본적으로 다음의 조건을 만족하는 Runner Slot에게 현재 START 상태인 JOB을 배정한다.

  • Runner Slot의 상태가 Active로 활성화되어 있어야 하며, 다른 JOB을 수행하고 있는 중이 아니어야 한다.

  • RUNNER CLASS가 JOB CLASS와 일치해야 한다.

  • JOB을 submit할 때 특정 노드에서 JOB이 실행되도록 명시했을 경우 그 노드와 Runner Slot이 속한 노드가 일치해야 한다.

다음은 스케줄링 메소드를 pseudo code로 나타낸 것이다.

Priority aging
For i = 1 to 8 /  * to iterate RUNNER CLASSes */
    For each idle runner {
      Get the list of Job which matches the ith class of the runner
      For each Job in descending priority order {
         Check node affinity. If fails, try next Job
         Check Jobname duplication. If fails, try next Job
         Assign the Job to the runner and break
      }
    }
JOB CLASS

JOB의 속성 중 하나로 JCL JOB 구문의 클래스 파라미터에 기술되는 한 개의 문자로, A-Z, 0-9 중 한 개의 값을 가져야 한다.

JCL에 클래스가 기술되어 있지 않을 때에는 OpenFrame 환경설정에 tjclrun 서브젝트, JOB 섹션의 CLASS 키에 기술된 디폴트 JOB CLASS를 사용한다. JOB CLASS는 해당 JOB이 실행될 수 있는 Runner Slot을 제한하는 용도로 JOB 스케줄링에 사용된다. A라는 JOB CLASS를 가진 JOB은 RUNNER CLASS에 CBA 또는 ABC와 같은 식으로 A를 포함한 Runner Slot에만 할당될 수 있다.

이외에도 JOB CLASS의 하위 속성인 HOLD에 따라 TJES의 동작방식이 달라진다. HOLD 속성이 명시된 JOB CLASS로 submit된 JOB은 JCL 상의 JOB 구문에 TYPRUN=HOLD가 지정되지 않았더라도 HOLD 상태로 submit된다.

tjclrun 서브젝트 설정에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

RUNNER CLASS

Runner Slot의 속성 중 하나로 OpenFrame 환경설정에 tjes 서브젝트, INITDEF 섹션에 기술된다.

RUNNER CLASS는 JOB CLASS와 일치해야 하므로 JOB CLASS와 동일한 A-Z, 0-9 중 1개의 값을 가지며, 1개의 Runner Slot은 최대 8개의 클래스를 가질 수 있다.

복수의 RUNNER CLASS가 설정된 경우에는 앞에 기술된 클래스에 해당하는 JOB이 없을 때에만 뒤에 기술된 클래스가 사용될 수 있다. 즉, 제일 먼저 설정된 클래스가 최우선이고 맨 마지막에 설정된 클래스가 제일 낮은 우선순위를 갖는다. 또한 i번째에 기술된 클래스에 해당하는 JOB을 실행하기 위해서는, TJES의 모든 Runner Slot이 i번째 이전에 기술된 클래스로 해당 JOB을 실행할 수 없어야 한다.

예를 들면 TJES 내에 1번 Runner Slot은 RUNNER CLASS가 ABC이고, 2번 Runner Slot은 BCA였을 때, C의 JOB은 B의 JOB이 없을 때 2번 Runner Slot의 두 번째 클래스로 실행될 수 있지만, 1번 Runner Slot의 세 번째 클래스로 실행하기 위해서는 A와 B의 JOB이 없으면서, 2번 Runner Slot이 이미 JOB을 실행하고 있거나 active 상태가 아니어서, 두 번째 클래스로 JOB을 실행할 수 없어야 한다.

tjes 서브젝트 설정에 대한 자세한 내용은 OpenFrame Batch "환경설정 안내서"를 참고한다.

3.3. Execution 단계

Runner가 실제로 JCL에 기술된 대로 JOB을 실행하는 단계이다.

Runner는 SPOOL에 복사되어 있는 JCL을 파싱하고, 그 결과에 따라 JOB을 실행한다. 하나의 JOB은 하나 이상의 JOB STEP으로 구성되는데, Runner는 이 JOB STEP을 JCL에 기술된 순서대로 순차적으로 실행한다. JOB을 실행할 때 필요한 데이터셋을 할당하는 일도 Execution 단계에서 일어난다.

3.4. Output 단계

JOB 수행 중 생성된 SYSOUT을 처리하는 단계이다. SYSOUT은 Output이라는 단위로 처리되는데, OUTPUT CLASS에 따라 처리할 수 있는 프린터와 기본 후처리가 결정된다.

Output은 프린터로 출력되거나 인터널 리더를 통해 TJES로 submit된다. 자세한 내용은 OUTPUT Processing을 참고한다.

3.5. Remove 단계

Output 단계로 진입한 JOB을 사용자의 명시적인 명령에 의해 TJES에서 삭제하는 단계이다.

JOB에 할당되었던 JOBID, SPOOL, JOBQ 등과 같은 모든 리소스가 시스템으로 반환된다. TJES에서 삭제한 JOB의 결과를 추후에 다시 접근하기 위해서는 SPOOL 백업 명령어를 통해 백업해야 한다. 백업에 성공하면 SPOOL에서 자동으로 JOB이 제거된다.

4. JOB 조회

submit된 JOB은 JCL의 파라미터에 기술된 값에 따라 START 또는 HOLD 상태로 JOBQ에 등록된다. JOBQ에 등록되어 있는 모든 JOB은 tjesmgr의 PS 명령어를 통해서 JOB의 상태를 확인할 수 있다.

START 상태의 JOB은 스케줄링을 통해 WORKING 상태로 바뀌면서 실행되고, ERROR나 DONE 또는 FLUSH 등으로 종료가 된다.

다음과 같은 tjesmgr 명령어를 통해서 JOB의 상세한 정보를 조회할 수 있다.

명령어 설명

PSJOB

JOB의 상세 정보를 보여준다.

PSIO

JOB에서 사용한 데이터셋들의 I/O 정보를 보여준다.

POSPOOL

JOB에서 생성한 SPOOL들의 정보를 보여준다.

PODD

JOB에서 생성한 SPOOL들의 내용을 보여준다.

POJOB

JOB과 관련한 Output 상세정보를 보여준다.

JOB의 정보 조회에 대한 상세한 설명과 기능은 JOB/OUTPUT 명령어를 참고한다.

5. 로그

TJES는 운영에 대한 자료로 사용하거나 운영할 때 발생할 수 있는 각종 사건들의 책임 소재를 분명히 하는 용도로 사용하기 위해서 TJES에서 일어나는 여러 가지 이벤트에 대하여 로그를 남긴다.

OpenFrame/Batch 시스템에서 TJES는 다음의 2가지의 로그를 남긴다.

  • JCL의 Submit에 대한 정보를 저장하는 Submit 로그

  • JOB의 모든 상태 변화에 대한 JOB 로그

매일 방대한 양의 로그가 기록될 수 있으므로 정리작업 없이 장기간 운영하면 로그 파일의 크기가 상당히 커질 수 있다. 이러한 문제점을 해결하기 위해서 날짜별로 로그를 생성하는 옵션을 제공한다.

5.1. Submit 로그

Submit 로그는 OpenFrame 환경설정에 ofsys 서브젝트, DIRECTORY 섹션의 LOG_DIR 키에 지정된 경로에 job 이라는 이름의 하위 디렉터리에 submit_YYYYMMDD.log의 이름으로 파일이 저장된다. Submit 로그는 성공과 실패를 구분하지 않고, obmjmsvr에서 인지한 JCL을 submit하려는 모든 시도에 대해 기록한다.

Submit 로그의 기본적인 형식은 다음과 같다.

>> timestamp    jclpath
submit_result
항목 설명

timestamp

yyyymmddHHMMSS 형태의 14자리 숫자이다.

jclpath

submit된 JCL의 UNIX 절대 경로이다.

submit_result

submit 결과를 나타내는 문구이다.

5.2. JOB 로그

JOB 로그는 OpenFrame 환경설정에 ofsys 서브젝트, DIRECTORY 섹션의 LOG_DIR 키에 지정된 경로에 job 하위 디렉터리에 job_YYYYMMDD.log의 이름으로 파일이 저장된다.

JOB 로그의 기본적인 형식은 다음과 같다.

[YYYY-MM-DDTHH:MI:SS.FFFFFF][MODULE(PID)][MSG_LEVEL][MSG_CODE] CMD=operation,NODE=nodename,USER=userid,JOBID=jobid,JOBNAME=jobname,additional info

다음은 공통 항목에 대한 설명이다.

항목 설명

CMD

operation의 종류를 설정한다.

  • SUBMIT : JOB이 submit된다.

  • EXECUTE : JOB을 Runner에 할당한다.

  • CHANGE : JOB의 속성이 실행 전에 변경되었다.

  • FINISH : JOB의 실행이 종료된다.

  • REMOVE : JOB이 TJES에서 제거된다.

  • SUSPEND : JOB이 일시정지된다.

  • RESUME : 일시정지된 JOB이 다시 수행된다.

  • NICE : JOB의 중앙 처리 장치의 사용시간에 대한 상대적인 우선순위를 설정한다.

  • STEP : JOB의 특정 STEP의 수행 정보이다.

  • CANCEL : JOB 수행이 취소된다.

NODE

JOB이 수행될 노드의 이름이다.

JCL에 JOB들이 실행될 execution_node를 지정하지 않았거나 OpenFrame 환경설정에 tjesmgr 서브젝트, DEFAULT_OPTION 섹션의 DEFAULT_RUNNING_NODE 키의 VALUE 항목을 MY로 설정하지 않았다면 모든 노드에서 실행될 수 있도록 애스터리스크(*)가 설정된다.

USER

JOB을 수행한 유저의 이름이다. CMD=FINISH인 경우 TJES로 출력된다.

JOBID

submit된 JOB ID이다.

JOBNAME

JOB의 이름이다.

additional info

additional info는 CMD=operation 값에 따라 다르다.

SUBMIT

JOB이 submit 된다.

  • 사용법

    CLASS=class,STATUS=status,JCL=path
    항목 설명

    CLASS

    submit된 JOB CLASS이다.

    STATUS

    JOB의 Submit 상태에 따라 설정된다.

    • S : START 상태

    • H : HOLD 상태

    • D : DONE 상태

    JCL

    복사된 INPJCL의 경로가 아니라 submit된 JCL의 원본 파일경로이다.

EXECUTE

JOB을 Runner에 할당한다.

  • 사용법

    INDEX=index,PID=pid,CLASS=class
    항목 설명

    INDEX

    JOB을 실행 중인 Runner Slot의 인덱스이다. 실행 중인 노드에서만 유효한 값이다.

    PID

    JOB을 실행 중인 Runner의 프로세스 ID이다. 실행 중인 노드에서만 유효한 값이다.

    CLASS

    Runner Slot에 할당된 복수의 클래스 중 현재 JOB을 실행하기 위해 사용하고 있는 클래스이다.

CHANGE

JOB의 속성이 실행 전에 변경되었다.

  • 사용법

    CLASS=class,PRIORITY=priority,STATUS=status
    항목 설명

    CLASS

    변경된 후의 JOB CLASS이다.

    PRIORITY

    변경된 후의 JOB의 우선순위 값이다.

    STATUS

    변경된 후의 JOB 상태이다.

    • S : START 상태

    • H : HOLD 상태

FINISH

JOB의 실행이 종료된다.

  • 사용법

    INDEX=index,PID=pid,STATUS=status,RCODE=exitcode
    항목 설명

    INDEX

    JOB을 실행 중인 Runner Slot의 인덱스이다. 실행 중인 노드에서만 유효한 값이다.

    PID

    JOB을 실행 중인 Runner의 프로세스 ID이다. 실행 중인 노드에서만 유효한 값이다.

    STATUS

    JOB의 종료 상태이다.

    • D : DONE 상태

    • E : ERROR 상태

    • T : STOP 상태

    • F : FLUSH 상태

    RCODE

    JOB의 EXIT CODE이다. 자세한 내용은 JOB EXIT CODE를 참고한다.

REMOVE

JOB이 TJES에서 제거된다.

  • 사용법

    STATUS=status
    항목 설명

    STATUS

    remove된 JOB의 종료 상태이다.

    • D : DONE 상태

    • E : ERROR 상태

    • T : STOP 상태

    • F : FLUSH 상태

SUSPEND

JOB이 일시정지된다.

  • 사용법

    INDEX=index,PID=pid,STATUS=status
    항목 설명

    INDEX

    JOB을 실행 중인 Runner Slot의 인덱스이다. 실행 중인 노드에서만 유효한 값이다.

    PID

    JOB을 실행 중인 Runner의 프로세스 ID이다. 실행 중인 노드에서만 유효한 값이다.

    STATUS

    suspend된 JOB의 상태이다.

    • P : SUSPEND 상태

RESUME

일시정지된 JOB이 다시 수행된다.

  • 사용법

    INDEX=index,PID=pid,STATUS=status
    항목 설명

    INDEX

    JOB을 실행 중인 Runner Slot의 인덱스이다. 실행 중인 노드에서만 유효한 값이다.

    PID

    JOB을 실행 중인 Runner의 프로세스 ID이다. 실행 중인 노드에서만 유효한 값이다.

    STATUS

    resume된 JOB의 상태이다.

    • W : WORKING 상태

NICE

JOB의 중앙 처리 장치의 사용시간에 대한 상대적인 우선순위를 설정한다.

  • 사용법

    INDEX=index,PID=pid,STATUS=status,NICE=nice
    항목 설명

    INDEX

    JOB을 실행 중인 Runner Slot의 인덱스이다. 실행 중인 노드에서만 유효한 값이다.

    PID

    JOB을 실행 중인 Runner의 프로세스 ID이다. 실행 중인 노드에서만 유효한 값이다.

    STATUS

    nice 처리된 JOB의 상태이다.

    • P : SUSPEND 상태

    • W : WORKING 상태

    NICE

    0에서 20까지의 숫자이며, 숫자가 낮을수록 우선순위가 높다.

STEP

JOB의 특정 STEP의 수행 정보이다.

  • 사용법

    STEPNAME=stepname,SKIP=skip,STEPSEQ=seqnum,RCODE=exitcode
    항목 설명

    STEPNAME

    JOB STEP의 이름이다.

    SKIP

    JOB STEP 수행의 skip 여부이다.

    • Y : 수행이 되지 않는다.

    • N : 수행된다.

    STEPSEQ

    JOB STEP의 순서번호이다. 1부터 시작한다.

    RCODE

    JOB의 EXIT CODE이다. 자세한 내용은 JOB EXIT CODE를 참고한다.

CANCEL

JOB 수행이 취소된다.

  • 사용법

    STATUS=status
    항목 설명

    STATUS

    취소된 JOB의 상태이다.

    • S : START 상태

    • H : HOLD 상태

6. JOB 백업

많은 JOB을 실행하게 되면 JOBQ에 JOB이 계속 쌓이게 되어 더이상 JOB을 submit할 수 없는 상태까지 될 수 있다. 따라서 오래된 JOB에 대해서는 JOBQ에서 삭제해야 하며, 삭제할 JOB들의 정보를 남겨놓고 싶을 때는 SPOOL을 백업한다.

다음은 SPOOL 백업과 관련한 명령어와 기능을 간단히 정리한 표이다.

명령어 설명

SPOOLBACKUP

JOBQ에서 JOB을 삭제하고, 삭제된 JOB의 SPOOL을 백업한다.

SPOOLBACKUPLIST

SPOOL이 백업된 날짜들을 보여준다.

SPOOLPS

해당 날짜에 백업된 JOB들을 보여준다.

SPOOLRESTORE

백업된 JOB들을 임시 디렉터리에 복원한다.

SPOOLPSJOB

복원된 JOB들의 상세 정보를 보여준다. (PSJOB과 동일한 정보 출력)

SPOOLPSIO

복원된 JOB들의 I/O 정보를 보여준다. (PSIO과 동일한 정보 출력)

SPOOLPOSPOOL

복원된 JOB들의 SPOOL 리스트를 보여준다. (POSPOOL과 동일한 정보 출력)

SPOOLPODD

복원된 JOB들의 SPOOL 내용을 보여준다. (PODD과 동일한 기능)

SPOOLCLEAR

임시 디렉터리에 복원된 JOB들을 제거한다.

상세한 설명과 기능은 SPOOL 백업 명령어를 참고한다.

7. JOB EXIT CODE

다음은 TJES에서의 JOB과 STEP의 EXIT CODE를 정의한다.

7.1. STEP EXIT CODE

각 STEP은 종료될 때 다음의 형식으로 반환 코드를 보고한다.

XNNNN
  • X

    EXIT STATUS로 R, S, U, A, F, M의 6가지 문자 중 하나를 갖고, 의미는 다음과 같다.

    항목 설명

    R

    Normal Condition으로 해당 애플리케이션이 정상적으로 종료했음을 의미한다.

    S

    SYSTEM ABEND로 해당 애플리케이션이 시그널로 종료했음을 의미한다.

    SIGPIPE, SIGSEGV, SIGABEND, SIGBUG 등의 시그널 중에 프로세스를 종료시키는 시그널로 인해 프로세스가 이상 종료한 경우이다.

    U

    USER ABEND로 해당 애플리케이션이 정한 ABEND 상황임을 보고하고 WAASABND를 통해 종료했음을 의미한다.

    A

    Application ABEND로 해당 애플리케이션은 정상적으로 종료했으나, 그 RC 값을 호출한 프로그램(IKJEFT01 등)에서 판단했을 때 조건을 만족하지 못해 JOB을 종료해야 함을 의미한다.

    F

    Flush 상태를 의미한다. Runner의 내부적인 오류로 인해 애플리케이션을 정상적으로 실행하지 못한 경우를 의미한다.

    M

    JOB문에 TYPRUN=JEM라고 기술하거나 tjesmgr JEM 명령어로 수행한 JOB의 결과에서만 나타나는 반환 코드이다.

  • NNNN

    0~4096까지의 숫자로 애플리케이션의 반환값이다(255 이상은 external rc module을 통해 반환 코드가 보고된다). 단, 'F' 상태인 경우는 Runner의 반환값이다.

7.2. JOB EXIT CODE

JOB EXIT CODE는 JOB의 종료 상황에 대한 부가 정보로 XNNNNN 형태를 가진다. (X : 6가지 문자(R, S, U, A, F, M)와 2가지 기호문자(+, -), N : 0-9)

다음은 각 상태별 JOB의 EXIT CODE의 형식에 대한 설명이다.

  • DONE

    XNNNNN

    마지막 STEP의 EXIT CODE이다(X는 STEP EXIT CODE와 동일하다).

  • ERROR

    XNNNNN

    ERROR를 발생시킨 STEP의 EXIT CODE이다(X는 STEP EXIT CODE와 동일하다).

  • STOP

    사용자가 STOP을 명령한 경우이므로 EXIT CODE는 무의미하다.

  • FLUSH

    [+-]NNNNN
    구분 설명

    +

    Runner에서 비정상적인 상태를 감지하여 종료한 경우이며, 이때 NNNNN은 Runner가 반환한 값이다. 에러 상황이 OpenFrame의 에러 코드로 정의된 명확한 상황은 Error Code를 반환하고 이외에 세분화하여 정의되지 않은 상황은 1이 반환된다.

    -

    Runner가 UNIX 시그널에 의해 비정상 종료한 경우이며, 이때 NNNNN은 UNIX 시그널 번호이다.