ecFlow's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

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 by default 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 reuse. If the same code appears in several different ecf script files, it should be placed in a include file instead. This then provides a single point of maintenance. For example, every task needs to set up the communication with the ecflow_server and then tell the server that it (task) has started. This ‘boilerplate’ code is placed in an include file.

head.h

The head.h include file is placed at the start of ecf script. It:

  • Provides the environment for communication with the ecflow_server
  • Defines script error handling. When the script fails a trap is raised, we inform the server the task has aborted.
  • Issues a 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=$$


# Define a error handler
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. It issues the complete child command

ecflow_client --complete  # Notify ecFlow of a normal end
trap 0                    # Remove all traps
exit 0                    # End the shell

What to do:

  • Create the head.h and tail.h files in your $HOME/course directory.
  • No labels