|
This is a small follow up exercise showing the use of embedded triggers.
These are trigger expressions embedded within the scripts using --wait child command.
Whilst the expression is not true, the job will hold.
Where possible you should give preference to triggers on the definitions, since these are checked on creation, whereas embedded triggers are checked at run time.
Add/amend the t2.ecf script
%include <head.h> ecflow_client --wait="t1 == complete" # wait for expression to become true %include <tail.h> |
# Definition of the suite test. suite test edit ECF_INCLUDE "$HOME/course" # replace '$HOME' with the path to your home directory edit ECF_HOME "$HOME/course" family f1 edit SLEEP 20 task t1 task t2 endfamily endsuite |
import os from ecflow import Defs,Suite,Family,Task,Edit,Trigger def create_family_f1(): return Family("f1", Edit(SLEEP=20), Task("t1"), Task("t2")) print("Creating suite definition") home = os.path.join(os.getenv("HOME"), "course") defs = Defs( Suite("test", Edit(ECF_INCLUDE=home,ECF_HOME=home), create_family_f1())) print(defs) print("check trigger expressions") check = defs.check() assert len(check) == 0, check print("Checking job creation: .ecf -> .job0") print(defs.check_job_creation()) print("Saving definition to file 'test.def'") defs.save_as_defs("test.def") |
Introduce an error in the wait expression, the job should abort
ecflow_client --wait="txx == complete" # there is no node with name txx, this should abort the task |
Introduce an impossible expression, what is the effect?
ecflow_client --wait="1 == 0" |
|