Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
HTML
<style type="text/css">
.highlight .hll { background-color: #ffffcc }
.highlight  { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #303030 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #208050 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #208050 } /* Literal.Number.Float */
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
</style>


<div class="section" id="glossary">
<span id="index-0"></span><span id="id1"></span>
<dl class="glossary docutils">
<dt id="term-aborted">aborted</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>
<p class="last">When the ECF_JOB_CMD fails or the <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a> sends 
<span id="index-0"></span><span id="id1"></span>
<dl class="glossary docutils">
<dt id="term-aborted">aborted</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-ecflow-clientnode"><em class="xref std std-term">ecflow_client<>node</em></a> &#8211;abort <a class="reference internal" href="#term-child-commandstatus"><em class="xref std std-term">child command<>status</em></a>, then
the task is placed into a aborted state.</p>
</dd>
<dt id="term-active">active</dt>
<dd><p/p>
<p class="first">Is alast">When the ECF_JOB_CMD fails or the <a class="reference internal" href="#term-nodejob-file"><em class="xref std std-term">node<>job file</em></a> sends a <a class="reference internal" href="#term-ecf-statusclient"><em class="xref std std-term">status<>ecf_client</em></a>.</p>
<p class="last">If &#8211;abort <a class="reference internal" href="#term-jobchild-creationcommand"><em class="xref std std-term">job>child creation<command</em></a> was successful, and, then
the task is placed into a aborted state.</p>
</dd>
<dt id="term-active">active</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-job-filenode"><em class="xref std std-term">job file</em></a> has started, then the >node</em></a> <a class="reference internal" href="#term-ecflow-clientstatus"><em class="xref std std-term">ecflow_client<>status</em></a> &#8211;init
.</p>
<p class="last">If <a class="reference internal" href="#term-childjob-commandcreation"><em class="xref std std-term">child>job command<creation</em></a> iswas received by thesuccessful, and <a class="reference internal" href="#term-ecflowjob-serverfile"><em class="xref std std-term">ecflow_server<>job file</em></a> andhas started, then the <a class="reference internal" href="#term-ecf-taskclient"><em class="xref std std-term">task<>ecf_client</em></a> is placed into a active state</p>
</dd>
<dt id="term-autocancel">autocancel</dt>
<dd>autocancel is a way to automatically delete a &#8211;init
<a class="reference internal" href="#term-child-nodecommand"><em class="xref std std-term">node<>child command</em></a> which has completed.
For BNF seeis received by the <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammar-token-autocancel"><tt#term-ecf-server"><em class="xref std std-token docutils literal"><span class="pre">autocancel</span></tt></a></dd>
<dt id="term-check-point">check point</dt>
<dd><p class="first">The check point file is like term">ecf_server</em></a> and the <a class="reference internal" href="#term-suite-definitiontask"><em class="xref std std-term">suite definition<>task</em></a>, butis includesplaced allinto thea state information.</p>
<p>It is periodically saved by theactive state</p>
</dd>
<dt id="term-autocancel">autocancel</dt>
<dd>autocancel is a way to automatically delete a <a class="reference internal" href="#term-ecflow-servernode"><em class="xref std std-term">ecflow_server<>node</em></a>.</p>
<p>It can be used to recover the state of the node tree should server die, or machine crash.</p>
<p class="last">By default when a server is started it will look to load the check point file.</p>
< which has completed.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-autocancel"><tt class="xref std std-token docutils literal"><span class="pre">autocancel</span></tt></a></dd>
<dt id="term-child-command">child command</dt>
<dd><p class="first">Child command&#8217;s(or task requests) are called from within the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> files. They include:</p>
<blockquote class="last">
<div><p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;init      # Sets the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> to the active <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a></p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;event     # Set an event</p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;meter     # Change a meter</p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;label     # Change a label</p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;msg       # Send a message to ecFlow-logfile</p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;wait      # wait for a expression to evaluate</p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;abort     # Sets the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> to the abort <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a></p>
<p><a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  &#8211;complete  # Sets the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> to the complete <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a></p>
</div></blockquote>
</dd>
<dt id="term-clock">clock</dt>
<dd><p class="first">A clock is an attribute of a <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>.</p>
<p>A clock always runs in phase with the system clock (UTC in UNIX) but can have any offset from the system clock.</p>
<p>The clock must be either hybrid or real:</p>
<blockquote>
<div><p>Under a hybrid clock, the date never changes unless specifically altered or unless the suite restarts,
either automatically or from a begin command.</p>
<p>Under a real clock, the date advances by one day at midnight.</p>
</div></blockquote>
<p class="last">Time and date <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> work a little differently under the two clocks.
The default clock type is hybrid.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-clock"><tt class="xref std std-token docutils literal"><span class="pre">clock</span></tt></a></p>
</dd>
<dt id="term-complete">complete</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>
<p>The node can be set to complete:</p>
<blockquote class="last">
<div><p>By the <a class="reference internal" href="#term-complete-trigger"><em class="xref std std-term">complete trigger</em></a></p>
<p>At job end when the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> receives the <a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a> &#8211;complete <a class="reference internal" href="#term-child-command"><em class="xref std std-term">child command</em></a></p>
</div></blockquote>
</dd>
<dt id="term-complete-trigger">complete trigger</dt>
<dd><p class="first">Force a node to be complete <strong>if</strong> the expression evaluates, without running any of the nodes.</p>
<p class="last">This allows you to have tasks in the suite which a run only if others fail.
In practice the node would need to have a <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> also.</p>
</dd>
<dt id="term-cron">cron</dt>
<dd>Like time, cron defines time dependency for a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>, but it can allow the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> to be repeated indefinitely.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-cron"><tt class="xref std std-token docutils literal"><span class="pre">cron</span></tt></a></dd>
<dt id="term-date">date</dt>
<dd><p class="first">This defines a date dependency for a node.</p>
<p class="last">There can be multiple date dependencies.
The European format is used for dates, which is: dd.mm.yy as in 31.12.2007.
Any of the three number fields can be expressed with a wildcard <cite>*</cite> to mean any valid value.
Thus, 01.*.* means the first day of every month of every year.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-date"><tt class="xref std std-token docutils literal"><span class="pre">date</span></tt></a></p>
</dd>
<dt id="term-day">day</dt>
<dd><p class="first">This defines a day dependency for a  node.</p>
<p class="last">There can be multiple day dependencies.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-day"><tt class="xref std std-token docutils literal"><span class="pre">day</span></tt></a></p>
</dd>
<dt id="term-defstatus">defstatus</dt>
<dd><p class="first">Defines the default status for a task/family to be assigned to the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> when the begin command is issued.</p>
<p class="last">By default <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> gets queued when you use begin on a <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>.
defstatus is useful in preventing suites from running automatically once begun or in setting
tasks complete so they can be run selectively.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-defstatus"><tt class="xref std std-token docutils literal"><span class="pre">defstatus</span></tt></a></p>
</dd>
<dt id="term-dependencies">dependencies</dt>
<dd><p class="first">Dependencies are attributes of node. They include <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a>, <a class="reference internal" href="#term-date"><em class="xref std std-term">date</em></a>, <a class="reference internal" href="#term-day"><em class="xref std std-term">day</em></a>, <a class="reference internal" href="#term-time"><em class="xref std std-term">time</em></a>
<a class="reference internal" href="#term-today"><em class="xref std std-term">today</em></a>, <a class="reference internal" href="#term-cron"><em class="xref std std-term">cron</em></a>, <a class="reference internal" href="#term-complete-trigger"><em class="xref std std-term">complete trigger</em></a>, <a class="reference internal" href="#term-inlimit"><em class="xref std std-term">inlimit</em></a> and  <a class="reference internal" href="#term-limit"><em class="xref std std-term">limit</em></a>.</p>
<p class="last">A <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> that is dependent can not be started as long as some dependency is holding it.</p>
</dd>
<dt id="term-directives">directives</dt>
<dd><p class="first">directives are expanded during <a class="reference internal" href="#term-pre-processing"><em class="xref std std-term">pre-processing</em></a>. Examples include:</p>
<blockquote class="last">
<div><p>%include &lt;filename&gt;</p>
<p>%comment : start&#8217;s a comment, which is ended by %end directive. The section enclosed by %comment - %end is removed during :term:` pre-processing`</p>
<p>%manual : start&#8217;s a manual, which is ended by %end directive. The section enclosed by %manual - %end is removed during :term:` pre-processing`
However the manual directive is used to create the <a class="reference internal" href="#term-manual-page"><em class="xref std std-term">manual page</em></a></p>
<p>%nopp  : stops pre-processing until a line stating with %end is found</p>
<p>%end : End pre-processing of %comment, %manual or %nopp</p>
<p>%VAR% : This direct&#8217;s the server to perform <a class="reference internal" href="#term-variable-substitution"><em class="xref std std-term">variable substitution</em></a>.
This involves searching for a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a> or generated <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a>
of name VAR and substituting in the value of the variable.</p>
</div></blockquote>
</dd>
<dt id="term-ecf-script">ecf script</dt>
<dd><p class="first">The ecFlow script refers to an ‘.ecf’ file.</p>
<p class="last">This is similar to a UNIX shell script.
The differences, however, includes the addition of “C” like pre-processing <a class="reference internal" href="#term-directives"><em class="xref std std-term">directives</em></a> and ecFlow <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a>&#8216;s.</p>
</dd>
<dt id="term-ecflow">ecFlow</dt>
<dd>ecFlow is the Supervisor Monitoring Scheduler software in place at ECMWF
that helps computer jobs design, submission and monitoring both in
the research and the operations departments.</dd>
<dt id="term-ecflowecf-client">ecflow>ecf_client</dt>
<dd><p class="first">This executable is a command line program; it is used for all communication with the server.</p>
<p>To see the full range of commands that can be sent to the <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> type the following in a UNIX shell:</p>
<blockquote>
<div>ecflow<div>ecf_client &#8211;help</div></blockquote>
<p class="last">This functionality is also provided by the <a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#python-api"><em>ecFlow Python Api</em></a> see class <tt <a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#ecflow.Client" title="ecflow.Client"><tt class="xref py py-class docutils literal"><span class="pre">ecflow.Client</span></tt></a></p>
</dd>
<dt id="term-ecflowecf-server">ecflow>ecf_server</dt>
<dd><p class="first">This executable is the server.</p>
<p>It is responsible for <a class="reference internal" href="#term-scheduling"><em class="xref std std-term">scheduling</em></a> the jobs and responding to <a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a> requests</p>
<p>Multiple servers can be run on the same machine/host providing they are assigned a unique port number.</p>
<p>The server record&#8217;s all request&#8217;s in the log file.</p>
<p>The server will periodically write out a check point file.</p>
<p class="last">A check point file is the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> with additional state information.</p>
"><em class="xref std std-term">suite definition</em></a> with additional state information.</p>
</dd>
<dt id="term-ecflow">ecFlow</dt>
<dd>ecFlow is the Supervisor Monitoring Scheduler software in place at ECMWF
that helps computer jobs design, submission and monitoring both in
the research and the operations departments.</dd>
<dt id="term-ecflowview">ecflowview<>ecFlowview</dt>
<dd><p class="first">ecflowview>ecFlowview executable is the GUI based client, that is used to visualise and monitor</p>
<blockquote class="last">
<div><p>The hierarchical structure of the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a></p>
<p>state changes in the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>&#8216;s and the <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a>, using colour coding</p>
<p>Attributes of the nodes and any <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a></p>
<p><a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> file and the corresponding <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a></p>
</div></blockquote>
</dd>
<dt id="term-event">event</dt>
<dd><p class="first">The purpose of an event is to signal partial completion of a <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> and to be able to
trigger another job which is waiting for this partial completion.</p>
<p>Only tasks can have events and they can be considered as an attribute of a <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>.</p>
<p>There can be many events and they are displayed as nodes.</p>
<p class="last">An event has a number and possibly a name. If it is only defined as a number,
its name is the text representation of the number without leading zeroes.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-event"><tt class="xref std std-token docutils literal"><span class="pre">event</span></tt></a></p>
</dd>
<dt id="term-extern">extern</dt>
<dd><p class="first">This allows an external <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> to be used in a <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> expression.</p>
<p>All <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>&#8216;s in <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a>&#8216;s must be known to <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> by the end of the load command.
No cross-suite <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> are allowed unless the names of tasks outside the suite are declared as external.
An external <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> reference is considered unknown if it is not defined when the <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> is evaluated.
You are strongly advised to avoid cross-suite <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a>.</p>
<p class="last">Families and suites that depend on one another should be placed in a single <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>.
If you think you need cross-suite dependencies, you should consider merging the suites
together and have each as a top-level family in the merged suite.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-extern"><tt class="xref std std-token docutils literal"><span class="pre">extern</span></tt></a></p>
</dd>
<dt id="term-family">family</dt>
<dd><p class="first">A family is an organisational entity that is used to provide hierarchy and grouping.
It consists of>Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a>.</p>
<p>A family is a collection of <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>&#8216;s and families.</p>
<p>Typically<p class="last">Typically you place tasks that are related to each other inside the same family, analogous to the way you
create directories to contain related files. For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammar-token-family"><tt class="xref std std-token docutils literal"><span class="pre">family</span></tt></a></p>
<p class="last">It serves as an intermediate <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a related files.
For BNF see <a class="reference internal" href="#term-suite-definition"><em/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-family"><tt class="xref std std-term">suite definition</em></a>.<token docutils literal"><span class="pre">family</span></tt></a></p>
</dd>
<dt id="term-halted">halted</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> state</p>
<p>The following tables reflects the server capabilities in the different states</p>
<table border="1" class="last docutils">
<colgroup>
<col width="22%" />
<col width="16%" />
<col width="16%" />
<col width="19%" />
<col width="26%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">State</th>
<th class="head">User Request</th>
<th class="head">Task Request</th>
<th class="head">Job Scheduling</th>
<th class="head">Auto-Check-pointing</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a></td>
<td>yes</td>
<td>yes</td>
<td>yes</td>
<td>yes</td>
</tr>"head">Auto-Check-pointing</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><a class="reference internal" href="#term-shutdownrunning"><em class="xref std std-term">shutdown<>running</em></a></td>
<td>yes</td>
<td>yes</td>
<td>no<<td>yes</td>
<td>yes</td>
</tr>
<tr><td><a class="reference internal" href="#term-haltedshutdown"><em class="xref std std-term">halted<>shutdown</em></a></td>
<td>yes</td>
<td>no<<td>yes</td>
<td>no</td>
<td>no</td>
</tr>
</tbody>
</table>
</dd>
<dt id="term-inlimit">inlimit</dt>
<dd><p class="first">The inlimit works in conjunction with <a class="reference internal" href="#term-limit"><em class="xref std std-term">limit</em></a> for providing simple load management</p>
<p class="last">inlimit is added to the <a <td>yes</td>
</tr>
<tr><td><a class="reference internal" href="#term-nodehalted"><em class="xref std std-term">node<>halted</em></a> that needs to be limited.</p>/a></td>
<td>yes</td>
<td>no</td>
<td>no</td>
<td>no</td>
</tr>
</tbody>
</table>
</dd>
<dt id="term-job-creation">job creation<inlimit">inlimit</dt>
<dd><p class="first">The process of job creation includes:</p>
<blockquote>
<div><p>o Locating <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> files , corresponding to the">The inlimit works in conjunction with <a class="reference internal" href="#term-tasklimit"><em class="xref std std-term">task<>limit</em></a> infor theproviding <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a></p>
<p>osimple load management</p>
<p class="last">inlimit is added to the <a class="reference internal" href="#term-pre-processingnode"><em class="xref std std-term">pre-processing<>node</em></a><a> that needs to be limited.</p>
</div></blockquote>dd>
<p>The steps above transforms an <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> to a<dt id="term-job-creation">job creation</dt>
<dd><p class="first">The process of job creation includes:</p>
<blockquote>
<div><p>o Locating <a class="reference internal" href="#term-jobecf-filescript"><em class="xref std std-term">job>ecf file<script</em></a> thatfiles can be submitted.</p>
<p>The running jobs will communicate back , corresponding to the <a class="reference internal" href="#term-ecflow-servertask"><em class="xref std std-term">ecflow_server<>task</em></a> byin callingthe <a class="reference internal" href="#term-childsuite-commanddefinition"><em class="xref std std-term">child>suite command<definition</em></a>&#8216;s.<a></p>
<p class="last">This causes <p>o <a class="reference internal" href="#term-statuspre-processing"><em class="xref std std-term">status<>pre-processing</em></a> changes on thea></p>
</div></blockquote>
<p>The steps above transforms an <a class="reference internal" href="#term-ecf-nodescript"><em class="xref std std-term">node<>ecf script</em></a>&#8216;s into thea <a class="reference internal" href="#term-ecflowjob-serverfile"><em class="xref std std-term">ecflow_server<>job file</em></a> and flagsthat can be set to indicate various events.</p>
</dd>
<dt id="term-job-file">job file</dt>
<dd><p class="first">The job file is created by the submitted.</p>
<p>The running jobs will communicate back to the <a class="reference internal" href="#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> by calling <a class="reference internal" href="#term-ecflowchild-servercommand"><em class="xref std std-term">ecflow_server<>child command</em></a> during&#8216;s.</p>
<p class="last">This causes <a class="reference internal" href="#term-job-creationstatus"><em class="xref std std-term">job creation<>status</em></a>.</p>
<p>It is derived from  changes on the <a class="reference internal" href="#term-ecf-scriptnode"><em class="xref std std-term">ecf script<>node</em></a> after expanding&#8216;s in the pre-processing <a class="reference internal" href="#term-ecf-directivesserver"><em class="xref std std-term">directives<>ecf_server</em></a>.</p>
<p class="last">It has the extension &#8221;.job{try number}&#8221;, i.e. t1.job1< and flags can be set to indicate various events.</p>
</dd>
<dt id="term-label">label<job-file">job file</dt>
<dd>A label has a name and a value and is a way of displaying information in<dd><p class="first">The job file is created by the <a class="reference internal" href="#term-ecflowviewecf-server"><em class="xref std std-term">ecflowview<>ecf_server</em></a>
For BNF seeduring <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammar-token-label"><tt#term-job-creation"><em class="xref std std-token docutils literal"><span class="pre">label</span></tt></a></dd>
<dt id="term-late">late</dt>
<dd><p class="first">Define a tag for a node to be late.</p>
<p class="last">Suites cannot be late, but you can define a late tag
for submitted in a suite, to be inherited by the families and tasks.
When a node is classified as being late, the only actionterm">job creation</em></a>.</p>
<p>It is derived from the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> after expanding the pre-processing <a class="reference internal" href="#term-ecflow-serverdirectives"><em class="xref std std-term">ecflow_server<>directives</em></a> takes is to set a flag.
<a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecflowview</em></a> will display these alongside the.</p>
<p class="last">It has the extension &#8221;.job{try number}&#8221;, i.e. t1.job1</p>
</dd>
<dt id="term-label">label</dt>
<dd>A label has a name and a value and is a way of displaying information in <a class="reference internal" href="#term-nodeecflowview"><em class="xref std std-term">node<>ecFlowview</em></a> name as an icon (and optionally pop up a window).
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-latelabel"><tt class="xref std std-token docutils literal"><span class="pre">late</span></tt></a></p>
</dd>
<dt id="term-limit">limit</dt>
<dd>limit provides a means of providing simple load management by say limiting the number
of tasks submitted to a specific server.
Typically you either define limits on class="pre">label</span></tt></a></dd>
<dt id="term-late">late</dt>
<dd><p class="first">Define a tag for a node to be late.</p>
<p class="last">Suites cannot be late, but you can define a late tag
for submitted in a suite, to be inherited by the families and tasks.
When a node is classified as being late, the only action <a class="reference internal" href="#term-suiteecf-server"><em class="xref std std-term">suite<>ecf_server</em></a> level or define a separate suite to
hold limits so that they can be used by multiple suites.
For BNF see  takes is to set a flag.
<a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammar-token-limit"><tt#term-ecflowview"><em class="xref std std-token docutils literal"><span class="pre">limit</span></tt></a> andterm">ecFlowview</em></a> will display these alongside the <a class="reference internal" href="#term-inlimitnode"><em class="xref std std-term">inlimit<>node</em></a></dd>
<dt id="term-manual-page">manual page</dt>
<dd><p class="first">Manual pages are part of thea> name as an icon (and optionally pop up a window).
For BNF see <a class="reference internal" href="#term-ecf-script"><em" href="/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-late"><tt class="xref std std-term">ecf script</em></a>.</p>
<p class="last">This is to ensure that the manual page is updated when the script is updated.
The manual page is a very important operational tool allowing you to view a description of a task,
and possibly describing solutions to common problems.
Thetoken docutils literal"><span class="pre">late</span></tt></a></p>
</dd>
<dt id="term-limit">limit</dt>
<dd>limit provides a means of providing simple load management by say limiting the number
of tasks submitted to a specific server.
Typically you either define limits on <a class="reference internal" href="#term-pre-processingsuite"><em class="xref std std-term">pre-processing<>suite</em></a> can be used to extract the manual page from the script file and is visible in level or define a separate suite to
hold limits so that they can be used by multiple suites.
For BNF see <a class="reference internal" href="#term-ecflowview"><em/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-limit"><tt class="xref std std-term">ecflowview</em></a>.
The manual page is the text contained within the %manual and %end token docutils literal"><span class="pre">limit</span></tt></a> and <a class="reference internal" href="#term-directivesinlimit"><em class="xref std std-term">directives<>inlimit</em></a>.
They can be seen using the manual button on /a></dd>
<dt id="term-manual-page">manual page</dt>
<dd><p class="first">Manual pages are part of the <a class="reference internal" href="#term-ecflowviewecf-script"><em class="xref std std-term">ecflowview<>ecf script</em></a>.</p>
</dd>
<dt id<p class="term-meter">meter</dt>
<dd>The purpose of a meter last">This is to signalensure proportionalthat completionthe ofmanual apage taskis andupdated to
bewhen ablethe toscript trigger another job whichis updated.
The manual page is waitinga onvery thisimportant proportionaloperational completion
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammar-token-meter"><tt class="xref std std-token docutils literal"><span class="pre">meter</span></tt></a></dd>
<dt id="term-node">node</dt>
<dd><p class="first"><atool allowing you to view a description of a task,
and possibly describing solutions to common problems.
The <a class="reference internal" href="#term-suitepre-processing"><em class="xref std std-term">suite<>pre-processing</em></a>, <a class="reference internal" href="#term-family"><em class="xref std std-term">family</em></a> and can be used to extract the manual page from the script file and is visible in <a class="reference internal" href="#term-taskecflowview"><em class="xref std std-term">task<>ecFlowview</em></a> form a hierarchy.
Where a.
The manual page is the text contained within the %manual and %end <a class="reference internal" href="#term-suitedirectives"><em class="xref std std-term">suite<>directives</em></a> serves as.
They can be seen using the rootmanual ofbutton theon hierarchy.
The <a class="reference internal" href="#term-familyecflowview"><em class="xref std std-term">family</em></a> provides the intermediate nodes, and the>ecFlowview</em></a>.</p>
</dd>
<dt id="term-meter">meter</dt>
<dd>The purpose of a meter is to signal proportional completion of a task and to
be able to trigger another job which is waiting on this proportional completion
For BNF see <a class="reference internal" href="#term-task"><em/wiki/display/ECFLOW/Definition+file+Grammer#grammar-token-meter"><tt class="xref std std-term">task</em></a>
provide the leaf&#8217;s.</p>
<p class="last">Collectively token docutils literal"><span class="pre">meter</span></tt></a></dd>
<dt id="term-node">node</dt>
<dd>A node is a <a class="reference internal" href="#term-suite"><em class="xref std std-term">suite</em></a>, <a class="reference internal" href="#term-family"><em class="xref std std-term">family</em></a> andor <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> can be referred
to as nodes.</p>
</a></dd>
<dt id="term-pre-processing">pre-processing</dt>
<dd><p class="first">Pre-processing takes place during <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> and acts on <a class="reference internal" href="#term-directives"><em class="xref std std-term">directives</em></a> specified in <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> file.</p>
<p>This involves:</p>
<blockquote class="last">
<div><p>o expanding any includes file directives.  i.e similar to &#8216;c&#8217; language pre-processing</p>
<p>o removing comments and manual directives</p>
<p>o performing <a class="reference internal" href="#term-variable-substitution"><em class="xref std std-term">variable substitution</em></a></p>
</div></blockquote>
</dd>
<dt id="term-queued">queued</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>
<p class="last">After the begin command, the task <strong>without</strong> a <a class="reference internal" href="#term-defstatus"><em class="xref std std-term">defstatus</em></a> are placed into the queued state</p>
</dd>
<dt id="term-repeat">repeat</dt>
<dd><p class="first">Repeats provide looping functionality. There can only be a single repeat on a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>.</p>
<blockquote>
<div><p>repeat day step [ENDDATE]                       # only for suites</p>
<p>repeat integer VARIABLE start end [step]</p>
<p>repeat enumerated VARIABLE first [second [third ...]]</p>
<p>repeat string VARIABLE str1 [str2 ...]</p>
<p>repeat file VARIABLE filename</p>
<p>repeat date VARIABLE yyyymmdd yyyymmdd [delta]</p>
</div></blockquote>
<p class="last">The repeat VARIABLE can be used in <a class="reference internal" href="#term-trigger"><em class="xref std std-term">trigger</em></a> and <a class="reference internal" href="#term-complete-trigger"><em class="xref std std-term">complete trigger</em></a> expressions
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-repeat"><tt class="xref std std-token docutils literal"><span class="pre">repeat</span></tt></a></p>
</dd>
<dt id="term-running">running</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> state.</p>
<p>The following tables reflects the server capabilities in the different states</p>
<table border="1" class="last docutils">
<colgroup>
<col width="22%" />
<col width="16%" />
<col width="16%" />
<col width="19%" />
<col width="26%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">State</th>
<th class="head">User Request</th>
<th class="head">Task Request</th>
<th class="head">Job Scheduling</th>
<th class="head">Auto-Check-pointing</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a></td>
<td>yes</td>
<td>yes</td>
<td>yes</td>
<td>yes</td>
</tr>
<tr><td><a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a></td>
<td>yes</td>
<td>yes</td>
<td>no</td>
<td>yes</td>
</tr>
<tr><td><a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a></td>
<td>yes</td>
<td>no</td>
<td>no</td>
<td>no</td>
</tr>
</tbody>
</table>
</dd>
<dt id="term-scheduling">scheduling</dt>
<dd><p class="first">The <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> is responsible for <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> scheduling.</p>
<p class="last">It will check <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> every minute.
If these <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> are free, the <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> will submit the task.
See <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a>.</p>
</dd>
<dt id="term-shutdown">shutdown</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> state.</p>
<p>The following tables reflects the server capabilities in the different states</p>
<table border="1" class="last docutils">
<colgroup>
<col width="22%" />
<col width="16%" />
<col width="16%" />
<col width="19%" />
<col width="26%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">State</th>
<th class="head">User Request</th>
<th class="head">Task Request</th>
<th class="head">Job Scheduling</th>
<th class="head">Auto-Check-pointing</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a></td>
<td>yes</td>
<td>yes</td>
<td>yes</td>
<td>yes</td>
</tr>
<tr><td><a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a></td>
<td>yes</td>
<td>yes</td>
<td>no</td>
<td>yes</td>
</tr>
<tr><td><a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a></td>
<td>yes</td>
<td>no</td>
<td>no</td>
<td>no</td>
</tr>
</tbody>
</table>
</dd>
<dt id="term-status">status</dt>
<dd><p class="first">Each <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> has a status.</p>
<p>Status reflects the state of the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>.
In <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecflowview<>ecFlowview</em></a> the background colour of the text reflects the status.</p>
<p><a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> status are: <a class="reference internal" href="#term-unknown"><em class="xref std std-term">unknown</em></a>, <a class="reference internal" href="#term-queued"><em class="xref std std-term">queued</em></a>, <a class="reference internal" href="#term-submitted"><em class="xref std std-term">submitted</em></a>, <a class="reference internal" href="#term-active"><em class="xref std std-term">active</em></a>, <a class="reference internal" href="#term-complete"><em class="xref std std-term">complete</em></a>, <a class="reference internal" href="#term-aborted"><em class="xref std std-term">aborted</em></a> and <a class="reference internal" href="#term-suspended"><em class="xref std std-term">suspended</em></a></p>
<p class="last"><a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> status are: <a class="reference internal" href="#term-shutdown"><em class="xref std std-term">shutdown</em></a>, <a class="reference internal" href="#term-halted"><em class="xref std std-term">halted</em></a>, <a class="reference internal" href="#term-running"><em class="xref std std-term">running</em></a>
this is shown on the root node in <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecflowview<>ecFlowview</em></a></p>
</dd>
<dt id="term-submitted">submitted</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>
<p class="last">When the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> <a class="reference internal" href="#term-dependencies"><em class="xref std std-term">dependencies</em></a> are resolved/free the <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a> places the task into a submitted state.
However if the ECF_JOB_CMD fails, the task is placed into the <a class="reference internal" href="#term-aborted"><em class="xref std std-term">aborted</em></a> state</p>
</dd>
<dt id="term-suite">suite</dt>
<dd><p class="first">A suite is organisational entity. It is serves as the root <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a into the <a class="reference internal" href="#term-suite-definitionaborted"><em class="xref std std-term">suite definition<>aborted</em></a>.
It should be used to hold a set of jobs that achieve a common function. It can be used to hold
user  state</p>
</dd>
<dt id="term-suite">suite</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-variablenode"><em class="xref std std-term">variable<>node</em></a> s that are common to all of its children.</p>
<p>Only a suite node can have a in a <a class="reference internal" href="#term-clocksuite-definition"><em class="xref std std-term">clock<>suite definition</em></a>.<a></p>
<p class="last">It>A suite is a collection of <a class="reference internal" href="#term-family"><em class="xref std std-term">family</em></a>&#8216;s, <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a>&#8216;s, <a class="reference internal" href="#term-repeat"><em class="xref std std-term">repeat</em></a> and a single
<a class="reference internal" href="#term-clock"><em class="xref std std-term">clock</em></a> definitiondefinitions. 
For a complete list of attributes look at BNF for <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-suite"><tt class="xref std std-token docutils literal"><span class="pre">suite</span></tt></a></p>
</dd>
<dt id="term-suite-definition">suite definition</dt>
<dd><p class="first">The suite definition is the hierarchical <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> tree.</p>
<p>It describes how your <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>&#8216;s run and interact.</p>
<p>It can built up using</p>
<blockquote>
<div><ul>
<li><p class="first">Ascii text file by following the rules defined in the ecFlow <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammerGrammer#grammer"><em>Definition file Grammar<Grammer</em></a>.</p>
<p>Hence any language can be used, to generate this format.</p>
</li>
<li><p class="first"><a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#python-api"><em>ecFlow Python Api</em></a></p>
</li>
</ul>
</div></blockquote>
<p class="last">Once the definition is built, it can beis loaded into the <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a>, and started.
It canis bethen monitored by <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecflowview<>ecFlowview</em></a></p>
</dd>
<dt id="term-suspended">suspended</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> state. A <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> can be placed into the suspended state via a <a class="reference internal" href="#term-defstatus"><em class="xref std std-term">defstatus</em></a> or via <a class="reference internal" href="#term-ecflowview"><em class="xref std std-term">ecflowview<>ecFlowview</em></a></p>
<p class="last">A suspended <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> including any of its children can not take part in <a class="reference internal" href="#term-scheduling"><em class="xref std std-term">scheduling</em></a> until
the node is resumed.</p>
</dd>
<dt id="term-task">task</dt>
<dd><p class="first">A task represents a job that needs to be carried out.
It serves as a leaf>Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> in a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a><a>, that represents a job that needs to be carried out.</p>
<p>Only tasks can be submitted.</p>
<p>A<p class="last">A job inside a task <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> should generally be re-entrant
so that no harm is done by rerunning it, since a task may be automatically
submitted more than once if it aborts.</p>
<p class="last">For For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-task"><tt class="xref std std-token docutils literal"><span class="pre">task</span></tt></a></p>
</dd>
<dt id="term-time">time</dt>
<dd><p class="first">This defines a time dependency for a node.</p>
<p class="last">Time is expressed in the format [h]h:mm.
Only numeric values are allowed. There can be multiple time dependencies for a node,
but overlapping times may cause unexpected results.
To define a series of times, specify the start time, end time and a time increment.
If the start time begins with &#8216;+&#8217;, times are relative to the beginning of the suite or,
in repeated families, relative to the beginning of the repeated family.
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-time"><tt class="xref std std-token docutils literal"><span class="pre">time</span></tt></a></p>
</dd>
<dt id="term-today">today</dt>
<dd><p class="first">Like <a class="reference internal" href="#term-time"><em class="xref std std-term">time</em></a>, but &#8220;today&#8221; does not wrap to tomorrow.</p>
<p class="last">If suites&#8217; begin time is past the time given for the &#8220;today&#8221; command the node is free
to run (as far as the time dependency is concern.)
For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-today"><tt class="xref std std-token docutils literal"><span class="pre">today</span></tt></a></p>
</dd>
<dt id="term-trigger">trigger</dt>
<dd><p class="first">Triggers defines a dependency for a task or family.</p>
<p class="last">There can be only one trigger dependency per node,
but that can be a complex boolean expression of the status of several nodes.
Triggers should be avoided on suites.
A node with a trigger can only be activated when its trigger has expired.
A trigger holds the node as long as the trigger&#8217;s expression evaluation returns false.</p>
</dd>
<dt id="term-unknown">unknown</dt>
<dd><p class="first">Is a <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a>.</p>
<p class="last">This is the default <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> <a class="reference internal" href="#term-status"><em class="xref std std-term">status</em></a> when a <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> is loaded into the <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a></p>
</dd>
<dt id="term-variable">variable</dt>
<dd><p class="first">ECF makes heavy use of different kinds of variables.There are several kinds of variables:</p>
<blockquote>
<div><p>Environment variables: which are set in the UNIX shell before the <a class="reference internal" href="#term-ecflow"><em class="xref std std-term">ecFlow</em></a> starts.
These control <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a>, and <a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a>  .</p>
<p>suite definition variables: Also referred to as user variables. These control <a class="reference internal" href="#term-ecflowecf-server"><em class="xref std std-term">ecflow>ecf_server</em></a>, and <a class="reference internal" href="#term-ecflowecf-client"><em class="xref std std-term">ecflow>ecf_client</em></a> and
are available for use in <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a>.</p>
<p>Generated variables: These are generated within the suite definition node tree during <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a>
and are available for use in the <a class="reference internal" href="#term-job-file"><em class="xref std std-term">job file</em></a>.</p>
</div></blockquote>
<p class="last">For BNF see <a class="reference internal" href="/wiki/display/ECFLOW/Definition+file+Grammar#grammarGrammer#grammar-token-variable"><tt class="xref std std-token docutils literal"><span class="pre">variable</span></tt></a></p>
</dd>
<dt id="term-variable-inheritance">variable inheritance</dt>
<dd><p class="first">When a <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a> is needed at <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> time, it is first sought in the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a> itself.</p>
<p>If it is not found in the <a class="reference internal" href="#term-task"><em class="xref std std-term">task</em></a>, it is sought from the task&#8217;s parent and so on, up through
the <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a> levels until found.</p>
<p>For any <a class="reference internal" href="#term-node"><em class="xref std std-term">node</em></a>, there are two places to look for variables.</p>
<p class="last">Suite definition variables are looked for first, and then any generated variables.</p>
</dd>
<dt id="term-variable-substitution">variable substitution</dt>
<dd><p class="first">Takes place during <a class="reference internal" href="#term-pre-processing"><em class="xref std std-term">pre-processing</em></a></p>
<p>It involves searching each line of <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> file, for ECF_MICRO character. typically &#8216;%&#8217;</p>
<p>The text between two % character, defines a variable. i.e %VAR%</p>
<p>This variable is searched for in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a>.</p>
<p>First the suite definition variables( sometimes referred to as user variables) are searched
and then the generated variables.</p>
<p>The value of the <a class="reference internal" href="#term-variable"><em class="xref std std-term">variable</em></a> is replaced between the % characters.</p>
<p>If the variable is not found in the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> during pre-processing
then <a class="reference internal" href="#term-job-creation"><em class="xref std std-term">job creation</em></a> fails, and an error message is written to the log file, and
the task is placed into the <a class="reference internal" href="#term-aborted"><em class="xref std std-term">aborted</em></a> state.</p>
<p>To avoid this variables in the <a class="reference internal" href="#term-ecf-script"><em class="xref std std-term">ecf script</em></a> can be defined as:</p>
<p class="last">%VAR:replacement% : This is similar to %VAR% but if VAR is not found in
the <a class="reference internal" href="#term-suite-definition"><em class="xref std std-term">suite definition</em></a> then &#8216;replacement&#8217; is used.</p>
</dd>
</dl>
</div>