Introduction
We had a request to automate a kill of some executing jobs in AJF at specific date and time.
For example:
A Control-M job is running a program all day, in order other programs can connect to it but those programs have to be stopped the night
There are several ways to manage that, such as:
- using in Action Tab, use Notifications before job completion, then run a Shout to a script which kills the Job with its %%ORDERID as parameter:
- Run a separate job which runs a script which does a Unix command Kill -9 of the script
- This new way which is also to run a separate job which runs a script which uses the native kill feature of Control-M (ctmkill utility), but it can be used to Kill one or several jobs at once, based on the list of Jobs name
=> This last method will be described here
For that we need
- a script (in Unix) which will run the ctmkill utility for 1 or several Job names which are in Executing mode
- A Control-M job which launches the script, passing as parameter the list of jobs to be killed
That Job is scheduled at the wished date & time - In some contexts, we need to pay attention on some prerequisites (Job name, type of agent, Control-M security)
Job definition
For this use case, there are Jobs:
- Job_Killer
- Two Jobs to kill : Job_To_Kill_1 and Job_To_Kill_2
- Running Jobs in AJF
Define in PARM# list of Jobs name to Kill
Unix script
$HOME/My_Scripts/kill_job_by_jobname.sh
# Description: kill one or several Control-M executing Jobs by using ctmpsm and ctmkill Control-M utilities # Parameter: 1 or several Job name from PARAM# # echo The number of daemon to kill is $# echo jobname $1 if [ -z "$1" ] then echo A jobname is required as first parameter exit 101 else echo Jobname : $1 fi # for each parameter until [ $# = 0 ] do echo Parameter value : $1 ### When using the ctmpsm utility of an Control-M agent, the separator is “pipe |” for awk export OrderId=`ctmpsm -LISTALL | grep $1 | grep Executin | awk -F" " '{print $1}'` # ### When using the ctmpsm utility of the Control-M server, the separator is “space |” for awk # export OrderId=`ctmpsm -LISTALL | grep $1 | grep Executin | awk -F" " '{print $1}'` echo The orderId for $1 job is : $OrderId # Get the number of order id in result num_OrderId=`echo $OrderId | awk '{print NF}'` echo The number of order id is : $num_OrderId # If no order id if [ -z "$OrderId" ] then echo No OrderId found. No kill will happen for $1. #echo No OrderId found. EXIT 102. #exit 102 # If more than one order id elif [ $num_OrderId -gt 1 ] then echo There is more than one order id : $num_OrderId. No kill will happen for $1. #echo There is more than one order id : $num_OrderId. EXIT 103. #exit 103 # Else display and kill the job else echo Parameter value is : $1. echo The order number is : $OrderId ctmkilljob -ORDERID $OrderId fi shift done
Pre-requisites
- Job name issues
- Length
It must be up to 18 characters, because the ctmpsm displays 18 characters - Similar Name
There should be no other existing running job which name starting with the same name, otherwise that job will be taken in account
For example:
Job executing to kill : Job_123
Another job executing : Job_123_To_no_Kill
=> That could be confusing because both jobs will be found in the pattern then it will fail
- Length
- Control-M Security
If Control-M Full Security (ctmsys) is set to Y, as the Agent is running the ctmkill utility, ensure that agent is defined in ctmsec as a User, and it has the permission in AUTHORIZED AJF Tab, The Kill option set to Yes
- ctmpsm utility
This utility is used to list all jobs in the AJF
It exists in Control-M/Server installation and also in Control-M/Agent installation, but the Output is slightly different, and then has an impact of the awk command within the script
=> In the script, with the awk command, indicate the appropriate separator :
awk -F” “ or awk -F”|”
Cet article How to automate a kill of one or several executing jobs in AJF at specific Date/Time at once est apparu en premier sur Blog dbi services.