Horizontal Navigation Bar | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
First ensure that the paths to ecFlow executables are accessible. At ECMWF this is done using the module command. Hence type the following at the command line:
Code Block | ||
---|---|---|
| ||
module load ecflow/5new
module load python3 |
Create a directory called course in your home directory and change to that directory. If you do not use modules you will need to add the correct path to your ecFlow binaries:
e.g. in ksh export PATH=/usr/local/apps/ecflow/5.5.0/bin:$PATH
Code Block |
---|
cd $HOME
mkdir course; cd course |
In order to use ecFlow we first need to start the ecflow_server
Shared Machine
On a shared machine multiple users and ecFlow servers can coexist. To allow this we have a startup script "ecflow_start.sh" that will start an ecflow_server. This will start an ecflow_server running on your system with a port number unique to your user ID. By default this script creates ecFlow log and check point files in the directory $HOME/ecflow_server. You can change the location of the log and checkpoint files using the -d option, e.g. to output these file in the course directory:
Code Block |
---|
ecflow_start.sh -d $HOME/course |
Note |
---|
Please keep a note of the Host and Port given from your ecf_start.sh output for later. The host and port number uniquely identify your ecflow_server . When you want to access this server using ecflow_client , Client Server API or ecflow_ui you need to know this information. By setting the value of the environment variables ECF_HOST and ECF_PORT you identify the server you wish to access. Multiple ecflow_servers can run on the same system using different port numbers. |
Local Machine
We prefer to start the ecFlow server with the ecflow_start.sh script to help prevent unintentional shared usage of the server. However, you could use the default ECF_PORT and started a server running on your own local machine using the following command:
Code Block |
---|
ecflow_server |
at the UNIX prompt.
This will start an ecflow_server running on your system with a default hostname of “localhost” and port number of 3141. If another program on your machine is using this same port number, then you will get an “Address in use” error. To start the server on a specific port number you can use:
Code Block |
---|
ecflow_server --port=3500 |
or:
Code Block |
---|
export ECF_PORT=3500; ecflow_server |
ecflow_server log files and checkpoint files are created in the current directory by default and have a prefix <machine_name>.<port_number>. As this allows multiple servers to run on the same machine. If you had previously run the same ecflow_server in the past it will also attempt to recover the suite definition from the checkpoint file.
What to do
Type the following, to set up up the paths
Code Block language bash title Access ecflow command line interface and python interface module load ecflow/5new module load python3
Create the
$HOME/course
directoryStart the server using
Code Block language bash title Start the server, and set ECF_HOME ecflow_start.sh -d $HOME/course
- Make a note of the ECF_HOST and ECF_PORT variables.
Make sure the following does not error.
Code Block language bash title Check ecflow python API python3 -c "import ecflow"
Note If in the subsequent sections, you have the need to start a new shell and want access to the server, then ensure
ECF_PORT
is set. (also callmodule load ecflow
/5new, and module load python3 in each new shell). The python is needed to access ecflow python API only.
Horizontal Navigation Bar | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||
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="getting-started">
<span id="index-0"></span><span id="id1"></span>
<ul>
<li><p class="first">Create a directory called course in your home directory (mkdir course)</p>
</li>
<li><p class="first">Open a new window, change the current directory to course (cd course) and start an <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-server"><em class="xref std std-term">ecf_server</em></a>:
If you are using a shared machine then type:</p>
<div class="highlight-python"><pre>> ecf_start.sh</pre>
</div>
<p>This will start an <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> running on your system with a port number unique to your user ID.
ECF log files and check point files are created in the current directory by default.</p>
<p>Please keep a note of the <strong>Host</strong> and <strong>Port</strong> given from your ecf_start output for later.
Note that the default for ECF log files is the <tt class="file docutils literal"><span class="pre">~/ecf_server</span></tt> directory.
The host and program number uniquely identify your ECF server.
When you want to access this server with <a class="reference internal" href="/wiki/display/ECFLOW/ecFlow+Python+Api#python-api"><em>ecFlow Python Api</em></a> or <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a> you need to know these numbers.
By setting the value of the variable ECF_NODE and ECF_PORT you identify the server you wish to access.
Multiple <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-server"><em class="xref std std-term">ecf_server</em></a>‘s can run on the same system.</p>
<p>Alternatively if you are running on your own local machine type:</p>
<div class="highlight-python"><pre>> ecf_server</pre>
</div>
<p>at the unix prompt.</p>
<p>This will start an <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-server"><em class="xref std std-term">ecf_server</em></a> running on your system with a default host name of “localhost” and port number of 3141.
If another program on your machine is using this port number, then you will get an “Address in use” error.
To start the server on a specific port number you can use:</p>
<div class="highlight-python"><pre>> ecf_server --port=3500</pre>
</div>
<p>or</p>
<div class="highlight-python"><pre>> export ECF_PORT=3500; ecf_server</pre>
</div>
<p>ECF log files and check point files are created in the current directory by default, and have
a prefix <machine_name>.<port_number>. As this allows multiple servers to run on the same machine.</p>
</li>
<li><p class="first">If you had previously run the same ECF server in the past it will also attempt to recover from a previous
ecf checkpoint file if available</p>
</li>
<li><p class="first">In another window, change the current directory to course and copy the file <a class="reference internal" href="#head-h"><em>head.h</em></a> and <a class="reference internal" href="#tail-h"><em>tail.h</em></a> into it.</p>
</li>
</ul>
<div class="section" id="head-h">
<span id="id2"></span><h2>head.h<a class="headerlink" href="#head-h" title="Permalink to this headline">¶</a></h2>
<div class="highlight-python"><pre>#!/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 stated
ecf_client --init=$$
# Defined a error hanlder
ERROR() {
set +e # Clear -e flag, so we don't fail
ecf_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</pre>
</div>
</div>
<div class="section" id="tail-h">
<span id="id3"></span><h2>tail.h<a class="headerlink" href="#tail-h" title="Permalink to this headline">¶</a></h2>
<div class="highlight-python"><pre>ecf_client --complete # Notify ecFlow of a normal end
trap 0 # Remove all traps
exit 0 # End the shell</pre>
</div>
</div>
</div>
|