Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Time+Dependencies |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Advanced+Topics |
---|
|
|
|
The ecflow server records all commands sent to it, in a log file (<host>.<port>.ecf.log)
This log file will grow over time to a considerable size.
In this exercise we will create a task, whose job is to periodically back up and clear this log file.
This will be done with cron attribute introduced in the previous page. A cron will run indefinitely. i.e. once it has completed it will automatically re-queue itself.
For more examples of adding a cron see the user manual and ecFlow Python Api
Ecf Script
We will create a new script, clear_log.ecf
Code Block |
---|
language | bash |
---|
title | $HOME/course/test/house_keeping/clear_log.ecf |
---|
|
%include <head.h>
# copy the log file to the ECF_HOME/log directory
cp %ECF_LOG% %ECF_HOME%/log/.
# clear the log file
ecflow_client --log=clear
%include <tail.h> |
Text
For brevity the previous families have been omitted.
Code Block |
---|
# 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 house_keeping
task clear_log
cron -w 0 22:30 # run every Sunday at 10:30pm
endfamily
endsuite |
Python
For brevity the previous families have been omitted.
Code Block |
---|
language | py |
---|
title | $HOME/course/test.py |
---|
|
import os
from ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter,Cron
def create_family_house_keeping():
return Family("house_keeping",
Task("clear_log",
Cron("22:30",days_of_week=[0])))
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_house_keeping()))
print(defs)
print("Checking job creation: .ecf -> .job0")
print(defs.check_job_creation())
print("Checking trigger expressions")
errors = defs.check()
assert len(errors) == 0,errors
print("Saving definition to file 'test.def'")
defs.save_as_defs("test.def") |
What to do
- Make the changes to the suite definition file
- Create all the necessary ecf script‘s
- Replace the suite
python: python test.py; python client.py
text: ecflow_client --suspend=/test ; ecflow_client --replace=/test test.def - ecflow_ui has a special window to explain why a task is queued. Select a queued task and press the
icon
or click on the 'Why tab' - Manually run the task. Examine the log file on disk.
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Time+Dependencies |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Advanced+Topics |
---|
|
|
|