In the previous section we created a task.
A task has corresponding ecf script which defines the work to be carried out. Scripts are similar to UNIX shell scripts.
However ecf script includes the addition of “c” like pre-processing directives and variable s.
The default pre-processing directives are specified using the % character.
One of the pre-processing directives is an include.
The include is used to inject code into a script, and provide a mechanism for code sharing. When you have several ecf script that need to define common code, it should be placed in a include file. This then provides a single point of maintenance.
head.h¶
The head.h include file is placed at the start of ecf script. It provides:
- Environment for communication with the server
- Defines script error handling. When a trap is raised, we inform the server the task has aborted.
- Child command to inform the server that job has started.
#!/bin/ksh
set -e # stop the shell on first error
set -u # fail when using an undefined variable
set -x # echo script lines as they are executed
# Defines the variables that are needed for any communication with ECF
export ECF_PORT=%ECF_PORT% # The server port number
export ECF_NODE=%ECF_NODE% # The name of ecf host that issued this task
export ECF_NAME=%ECF_NAME% # The name of this current task
export ECF_PASS=%ECF_PASS% # A unique password
export ECF_TRYNO=%ECF_TRYNO% # Current try number of the task
export ECF_RID=$$
# Tell ecFlow we have started
ecflow_client --init=$$
# Defined a error hanlder
ERROR() {
set +e # Clear -e flag, so we don't fail
ecflow_client --abort=trap # Notify ecFlow that something went wrong, using 'trap' as the reason
trap 0 # Remove the trap
exit 0 # End the script
}
# Trap any calls to exit and errors caught by the -e flag
trap ERROR 0
# Trap any signal that may cause the script to fail
trap '{ echo "Killed by a signal"; ERROR ; }' 1 2 3 4 5 6 7 8 10 12 13 15
tail.h¶
The tail.h include file is placed at the end of ecf script and is used to inform the server that job has completed.
ecflow_client --complete # Notify ecFlow of a normal end
trap 0 # Remove all traps
exit 0 # End the shell
What to do: