Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Jobs are executed with JS7 Agents that handle termination of jobs.
    • Shell Jobs and JVM Jobs are under Control of the Agent that reliably terminates running jobs.
    • Jobs implementing use of an SSH Client or use of the JS7 - JITL SSHJob cannot guarantee that a job's child processes are terminated as they are controlled by the remote SSHD server.
  • Termination of jobs can be caused by users from the JOC Cockpit and can performed automatically if a job exceeds a given timeout.
    • As a prerequisite for termination by JOC Cockpit the Controller has to be connected to JOC Cockpit and the Agent has to be accessible to the Controller.

...

  • By default the OS removes child processes if the parent process is killed. However, this mechanism is not applicable for all situations, depending on the way how child processes have been spawned.
  • To reliably kill child processes the Agent makes use of the kill_task.sh script from its var_<port>/work directory.
    • This script retrieves the process tree of the job script and tries to kill any child processes.
    • Download: kill_task.sh
  • Though the Agent is platform independent it is evident that retrieval of a process tree does not necessarily use the same command (ps) and options for any Unixes.
    • The Agent therefore allows to specify an individual kill script from a command line option should the built-in kill_task.sh script not be applicable to your Unix platform.

Use of Exit Traps

In a situation when a Shell Job script starts a background process and does not wait for termination of the child process but instead completes (with our without error), then the Agent cannot identify the running child process (as its parent process is gone). It is therefore recommended to add a trap to the shell script that is triggered on termination of the script - independently from the fact that the script terminates normally or with an error. This prevents the script from terminating immediately with child processes running. Instead in case of forced termination the Agent executes the kill_task.sh script that identifies the process of the Shell Job script and kills any of its child processes. 

Download: jduExitTrap.json

Code Block
languagebash
titleExample for Exit Trap on Script Termination
linenumberstrue
#!/bin/bash

# define trap for script completion
trap 'JS7TrapOnExit' EXIT

JS7TrapOnExit()
{
    echo "($(date +%T.%3N)) $(basename $0): JS7TrapOnExit: waiting for completion of child processes ..."
    wait
}

# create three child processes
sleep 100 &
sleep 110 &
sleep 120 &

# this is what the script normally should do:
#   echo "waiting for completion of child processes"
#   wait

echo "script completed"

Explanation:

  • Line 4: defines the trap calling the JS7TrapOnExit() function in case of the EXIT event.
  • Line 6 - 10: implements function including the wait command to wait for termination of any child processes or otherwise to immediately continue.
  • Line 13-15: start background processes.
  • Line 19: a script normally should wait for child processes, however, if this cannot be guaranteed then use of a trap is an appropriate means.

Automation of Exit Traps

JS7 offers an option to apply traps such as from the above example to a number of Shell job scripts via JS7 - Script Includes.

  • The trap and trap function are added to a Script Include like this:

    Image Added


  • The Script Include is embedded into any Shell Job script from a single line similar to a shebang:

    Image Added

Terminating Jobs on Windows

...

  • The Agent makes use of the kill_task.cmd script that is available from its var_<port>/work directory.
    • The script makes use of the taskkill command to kill the job's process and its children.
    • Download: kill_task.cmd
  • An individual kill script can be specified with a command line option on Agent startup.

...