Control-M/EM Client에서 실행중(Executing 상태)로 보이는 Job을 중지하는 방법


1. Monitoring Domain의 All Active Jobs에서, 실행중(노란색)으로 표시된 Job을 선택하고, 오른쪽에서 Order ID를 복사합니다.

실행중(노란색)으로 표시된 Job이 Hold 상태이면 안됩니다.



스크린샷 2023-11-27 110711.png


2. Control-M/Server가 설치된 서버에 ctmuser 계정으로 로그인하고, 아래와 같이 명령어를 실행합니다. 

<order_id in base 36> 부분에 위에서 복사한 Order ID를 넣어주면 됩니다.


$HOME/bmcperl/perl $CONTROLM_SERVER/scripts/force_end_job.pl <order_id in base 36>

Order ID가 001xc 인 경우, 아래와 같이 실행합니다.


$HOME/bmcperl/perl $CONTROLM_SERVER/scripts/force_end_job.pl 001xc


3. 다음과 같이 Please confirm that you wish to force the job to end NOTOK on the CONTROL-M/Server side only [Y|N]:에 Y를 입력하면, NOTOK로 종료됩니다.


  The following job will be forced to end:
   scheduling table = TEST
   filename         =
   jobname          = TEST_JOB_01
   order id         = 1xc
   order number     = 2496
   run number       = 4
   state            = 4 (Executing)
   free/hold/delete = Free

*************************************************************************
*   Please note that the job is currently Executing.                    *
*   This program will end the job on the CONTROL-M/Server side only!.   *
*   If you wish to terminate (kill) the job on the Agent machine,       *
*   you should run ctmkilljob utility and not force_end_job.pl.pl       *
*************************************************************************

Please confirm that you wish to force the job to end NOTOK on the CONTROL-M/Server side only [Y|N]: y

Job was forced to end NOTOK.
Shout was sent to IOALOG (message: "JOB FORCED TO END NOTOK BY USER ctmuser")



스크린샷 2023-11-27 110437.png


4. NOTOK 상태로 변경된 Job은 다음 New Day Time에 삭제됩니다. 

지금 삭제하려면, [Hold] --> [Delete] 로 All Active Jobs에서 삭제할 수 있습니다. 






녹색 표시된 강조된 항목은 Agent의 수와 작업 유형에 따라 더 큰 영향을 미칩니다.

 CPU SPEC / Memory

동일한 Host의 BMC PG 구성에 대한 계산 값해당 표의 요구사항을 충족하는 하드웨어의 유형 확인은 spec.org 사이트 참조.


 DB_UPDATE_THREADS

사용자의 환경에서 많은 수의 MFT 작업이 포함된 경우만 해당. MFT 작업이 Active 상태이면 Control-M/EM에 정기적으로 상태에 대한 업데이트를 보냄. Control-M/EM에 작업이 종료될 때까지 상태를 업데이트 하는 간격.

(OS 작업과 비교했을 때 초 단위)


 AGENT_APP_STATUS_UPDATES_THREADS

MFT 대시보드를 채우는 EM 정보를 전송하는데 사용되는 Threads의 개수적절한 수의 MFT 작업이 있는 경우 설정 값을 두배로 증가해야 함.


 AGENT_UTILS_THREADS

Control-M/Agent에서 호출된 Agent Utility를 처리하는 데 사용각각의 Threads는 Utility 단일 호출을 처리하고, Threads의 개수보다 동시에 더 많은 Utility가 실행 중인 경우 대기하게 됨.

표의 값을 늘릴 경우 더 많은 Agent Utility를 동시에 실행 가능.


 NS_THREADS

작업의 output 출력작업 실행작업의 상태 추적 등 Control-M/Agent 로 전송되는 개별 요청을 처리. Transient Communication 모드에서 Agent에 대한 요청이 NS Threads 수 보다 많은 경우 요청이 대기함.

AJF에서 많은 작업이 없어도 Agent가 매우 바쁜 경우 해당 값을 늘릴 경우 처리 량을 향상 시킬 수 있음.


※ CTMS_JVM_MAX_HEAP

Threads의 수가 증가했을 때 Java 프로세스는 추가 작업을 처리하기 위해 더 많은 리소스를 필요로 함작업 Threads가 기본 값 보다 증가하게 되면 필요한 CPU  Memory 표의 상위 단계의 값으로 변경을 고려해야 함.

해당 값은 Control-M/Server가 시작되면 설정된 값이 Control-M/Server /proclog 디렉터리의 SU log에 표시됨.


 # of CS processes

CS 프로세스는 Control-M/EM 사용자의 요청을 처리하며, EM Client의 사용자가 많은 경우 동시 요청 수가 더 많아지게 되면 CS 프로세스 수는 위의 표에서 권장 되는 값보다 더 빨리 늘리는 것을 권장함.

 

 ORDERING_THREAD_POOL_SIZE

User Daily, System Daily 또는 간단한 Order와 같은 모든 Order 작업에 대해 수행할 수 있는 Order 작업 수를 결정 (v9.0.00 – v9.0.20)


 JAVA_SCHEDULER_THREAD_POOL_SIZE

동일한 priority의 작업을 실행할 수 있는지 확인을 위한 Thread의 수를 결정.


 - maxConcurrentJobs

ctmrpln Utility를 사용하고 Report의 작업 수가 6000보다 큰 경우에 변경이 필요.

 

 Thread가 구성된 최대 값에 도달했는지 확인하는 방법

Control-M/Server는 구성정보 확인을 위한 ctmipc Utility를 제공함아래 명령어 실행 시 구성된 Threads 정보와 해당 Utility가 마지막으로 실행된 이후 사용된 ‘peak’ Threads 개수와 함께 각 Threads Pool에 대한 table이 표시됨.

실행 명령어 : ctmipc -dest CE -msgid CTL -data "CtmThreadPool"

 

 #of CS processes 외에 모든 변수의 값은 Control-M/Server가 설치된 서버의

 ~/ctm_server/data/config.dat 경로의 파일에서 확인 가능.


1.png


우선, Job이 실행 종료 후에 post action 으로 명령어를 수행하는 방법은 shout를 사용하는 방법과 Post-execution Command를 등록하는 방법이 있습니다.

일반적으로 shout를 사용하는 방법을 많이 사용합니다.


1. Shout를 이용한 Post Action 실행 방법

1) Control-M Configuration Manager에서, Manage탭에서, [Shout Destination]을 선택합니다.

2) Shout Destinations Manager에서, SYSTEM을 선택합니다.

3) Shout Destination List Editor에서, [Add Shout Destination]을 선택합니다.

1.png


4) New Destination 창에서, 다음과 같이 항목을 입력합니다.

Logical Name: 새로운 shout의 이름을 입력합니다. 

Address: Server를 선택합니다. Agent를 선택할 경우, 실행할 스크립트 파일을 해당 Agent에 저장이 필요합니다.

Destination: Program 을 선택합니다. Program은 Control-M/Server의 특정 위치의 스크립트 파일을 실행할 수 있습니다. 

Value: shout 에서 실행할 스크립트를 전체 경로로 입력합니다. 

2.png


5) [OK]를 선택합니다. 

6) Shout Destination List Editor 창과 Shout Destinations Manager 창도 모두 [Close] 선택합니다.

7) Job 등록정보의 Actions 탭에서, 아래의 두 가지 등록 방법이 있습니다.


Notifications after job completion으로 등록하는 경우, 다음과 같이 입력합니다.

When: OK 또는 Not OK

Destination: 이전 단계에서 생성한 shout의 이름(샘플: POSTACTION)

Message: 이전 단계에서 shout의 value로 입력된 스크립트에서 입력받을 내용

(예: /sw/controlm/ctm9192/SHOUT/message.sh 를 실행할 때 인자값으로 전달하려는 값)

Urgency: Very Urgent, Urgent, Regular 중에서 선택

3.png



OK 또는 Not OK 상태 외에 다른 상태에 대해서 shout를 등록하려는 경우는 On-Do Actions를 추가해야 합니다.

On: shout를 실행하는 조건을 선택

Do: Notify 선택

Destination: 이전 단계에서 생성한 shout의 이름(샘플: POSTACTION)

Message: 이전 단계에서 shout의 value로 입력된 스크립트에서 입력받을 내용

(예: /sw/controlm/ctm9192/SHOUT/message.sh 를 실행할 때 인자값으로 전달하려는 값)

Urgency: Very Urgent, Urgent, Regular 중에서 선택


4.png

8) check-in 해서 적용합니다.


위의 작업을 수백개의 Job에 일괄적용하려면, [Find and Update] 기능을 이용할 수 있습니다.

1) 일괄적용하려면 Job들이 포함된 Folder를 Workspace에서 Load 합니다.

2) [Find and Update]를 선택합니다.

3) Find jobs that match All the following criteria: 에서, 일괄적용하려는 Job들에 대한 조건을 선택합니다. 

샘플을 JOBNAME이 TEST_PROGRAM으로 시작하는 경우입니다.

그 외에 Folder Name이나 Application Name 등, 대상에 대한 조건을 입력한 후, [Find]를 선택합니다.


5.png

4) Find Results 항목에, 일괄적용 하려는 Job 들이 나열되는지 확인합니다. 

5) Update matching jobs according to following criteria: 에서, [New] 버튼을 선택하고, Application 부분을 클릭해서, [Actions] > [Notofications] > [Notification] 을 선택합니다.


6.png

6) Update Notification 옆에, [Add Child] 버튼을 선택해서, 아래와 같이 항목을 추가합니다.

항목의 값은 Job 등록정보의 Action 탭에 입력한 값과 동일합니다. 


7.png





7.png

7) 모든 항목을 모두 입력한 후에, Update 부분을 클릭하고, [Add]를 선택합니다.

8.png

8) [Update]를 선택하고, Update Results 에서, Validation Status가 Valid 인지 확인합니다.

9.png


2. Post-execution Command를 등록하는 방법

Job 등록정보의 General탭에서, Post-execution Command: 에 Job이 종료된 후에 실행할 명령어를 입력할 수 있습니다. 

여기에 등록된 명령어의 실행 결과는 확인할 수 없으며, Output도 제공되지 않습니다.

그러나, 명령어가 실행된 시간은 Job의 실행 시간에 포함됩니다. 


10.png


일괄등록 방법은 위와 동일하게 [Find and Update] 기능을 이용할 수 있습니다. 

[General] > [Post Execution] 을 선택하면 됩니다.



11.png

Update Post Execution assign 항목에: 실행할 명령어를 입력한 후에, [Update]를 선택합니다. 


위의 두 가지 방법은 Job이 실행 종료될 때마다 특정 API를 실행하도록 명령어를 실행할 수 있는 방법입니다. 


1. 실행이 완료된 Job의 실행 결과를 조회하는 쿼리

Control-M/EM의 DB에서 조회하므로, emuser를 사용합니다. 


select sched_table, job_mem_name, order_date, start_time, end_time, ended_status from RUNINFO_HISTORY


ended_status 는 다음의 두 가지 값을 반환합니다.

16 = ended OK
32 = ended NOTOK

RUNINFO_HISTORY은 본래 Control-M/Forecast에서 사용되는 테이블이며, 최근 90일간의 Job 실행 결과를 보관합니다.

하지만, Job의 종료상태를 저장하기 때문에, Running 또는 wait conditon 상태는 아직 저장되지 않습니다.


2. 현재 All Active Jobs에서 Job의 실행 상태를 조회하는 쿼리

Control-M/Server의 DB에서 조회하므로, ctmuser를 사용합니다.


select schedtab, jobname, odate, startrun, endrun, state from CMR_AJF


state 는 다음과 같은 값을 반환합니다.

0 Wait Scheduling  

1 Wait Confirm  

2 Submitted  

3 Not Submitted  

4 Executing  

5 Ended  

6 Analyzed  

7 Disappeared  

8 Post Processed  

9 Not Found  

A Wait Rerun  

B Wait Time  

C Wait Condition  

D Wait Resource  

E Wait Submission  

F Not Known  

G Retry Submit  

H Wait Group Schedule  

I Fail Submit  

J Wait ODAT  

K Post ODAT  

L Job Wait Node From Control-M Server V7.0.0, job that waits for agent to be available is set to CM_JOB_WAIT_NODE (instead of CM_JOB_WAIT_RSC)

M Job Wait Workload A job reaches this state, if the “number of running jobs” of the workload it is a member of, reaches the Workload's limit.

Z Unknown


status는 다음과 같은 값을 반환합니다.

Y       means that the job has completed successfully.

N       means that it has not completed or it has completed unsuccessfully.


HOLDFLAG는 다음과 같은 값을 반환합니다.

N not on hold

Y on hold

D deleted


Keep Active for (MAXWAIT) 파라미터는 Waiting 상태와 Ended NOTOK 상태인 Job을 AJF(Active Job File)에 남겨두는 기간을 지정합니다.

입력된 숫자는 일자 기준 기간이고, Order 된 날로 부터의 기간이 아니고, Job의 ODATE로 부터 현재 (New Day Time이 변경되는 시점) ODATE의 기간입니다.


일반적으로 Cyclic Job은 0 으로 설정하고, Cyclic 이 아닌 경우는 1~98 중에서 필요에 의해서 입력하게 됩니다. 


Keep Active for (MAXWAIT) 파라미터 값은 다음과 같이 세 가지 경우로 검토가 필요합니다. 


1 ~ 98 사이의 값은 Waiting 상태와 Ended NOTOK 상태인 Job을 설정된 기간동안 보관합니다.

0 인 경우, Ended Not OK 상태인 Job만 예외적으로 하루 동안 삭제하지 않습니다. 

99 인 경우, Forever 로 설정되어 영원히 삭제하지 않기 때문에 수동으로 삭제해야 합니다.

값을 정의하지 않은 경우는 0 으로 적용됩니다.



1.png

아래 문서의 추가 설명은 Keep Active for (MAXWAIT) 파라미터 값이 0 이거나 정의되지 않은 경우에 대한 예외적인 처리를 포함합니다.




2.png

아래 문서는 Keep Active for (MAXWAIT) 파라미터 값이 99(Forever) 인 경우에 shout를 이용한 삭제 방법을 포함합니다.




3.png


Control-M Configuration Manager에서, Host Manager의 Participation Definitions 기능에 대한 설명.


관련 youtube 영상이 있어서 함께 참고하시기 바랍니다. 

https://www.youtube.com/watch?v=R9gksZctpKE


Participation Definitions는 Host Group에 Agent를 할당한 후에, Agent의 참여 요건을 설정할 수 있는 기능입니다.

참여 요건을 만족할 때만, 해당 Agent로 Job을 Summit 하는 기능입니다.

참여 요건을 만족한다고, 그 Agent로만 Job을 Summit 하는 것은 아니고, Host Group에 포함된 다른 Agent 들에도 Job은 Summit 가능합니다.

[New Participation Definition...] 버튼을 눌러서, Agent의 참여 요건을 추가할 수 있습니다. 


1. Date & Time Settings

Host Group에 해당 Agent의 참여하는 요건을 일자와 시간으로 설정할 수 있습니다.


1) 아래와 같이 All Days 와 All Hours를 선택하면 항상 참여하게 되므로, 설정한 의미가 없게 됩니다. 

1691717686.4864.png


2) 아래와 같이 토요일, 일요일을 선택하고, AM 9:00 ~ PM 6:00 으로 설정하는 경우, 토요일과 일요일 09시부터 18시 사이에만 해당 Agent로 Job이 Summit 됩니다. 그 외에 요일과 시간에는 해당 Agent에서 Job이 실행되지 않습니다. 

1691717686.4872.png


2. Condition Settings

Host Group에 해당 Agent의 참여하는 요건을 'Condition' 존재 여부로 설정할 수 있습니다. 

다음은 TEST_PARTICIPATION 이라는 Condition이 존재하면 해당 Agent로 Job을 Summit 하는 설정입니다. 

3.png


TEST_PARTICIPATION 이라는 Condition이 생성되기 전까지는 해당 Agent에서 Job이 실행되지 않습니다. 

TEST_PARTICIPATION Condition이 생성되면, 해당 Agent로 Job이 summit 가능합니다. 

4.png

Participation Definitions는 Agent 마다 정의하고, 하나의 Agent에 여러 가지 요건을 정의할 수 있습니다. 

5.png


Participation Definitions 설정은 [OK]를 눌러서 저장하면 요건이 적용되고, Agent의 재시작은 필요 없습니다. 

Control-M/Server가 설정에 따라서 Control-M/Agent에게 Job을 Summit 하는 것입니다. 


Agent 서버의 PM 시에 사용하시면 도움이 되는 기능으로 판단됩니다.