<span class="target" id="index-0"></span><div class="section" id="running-the-jobs">
<div class="line-block">
<div class="line">To start a job, <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecflow-server"><em class="xref std std-term">ecflow_server</em></a> uses the content of the ECF_JOB_CMD <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a>.</div>
<div class="line">By modifying this variable, it is possible to control where and how a <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-job-file"><em class="xref std std-term">job file</em></a> will run.</div>
<div class="line">The command should be used in conjunctions with the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> ECF_JOB and ECF_JOBOUT.</div>
<div class="line">The ECF_JOB variable contains the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-job-file"><em class="xref std std-term">job file</em></a> path and ECF_JOBOUT contains</div>
<div class="line">the path of a file where the output of the job will be written.</div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">The default command ECF_JOB_CMD = %ECF_JOB% 1> %ECF_JOBOUT% 2>&1 &</p>
</div>
<div class="line-block">
<div class="line">Let us run the tasks on a remote machine. For that we could use the unix command rsh.</div>
<div class="line">We would like the name of the host to be defined by an <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-variable"><em class="xref std std-term">variable</em></a> called HOST.</div>
<div class="line">We assume that all the files are visible on all the hosts, i.e. using NFS.</div>
</div>
<p>In the examples below replace the string ?????? with a host name of your choice.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<div class="line-block">
<div class="line">The environment of a task running on a remote host is different from that of a task running locally.</div>
<div class="line">This depends on how your system is set up. Here we need to set PATH, to allow <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-child-command"><em class="xref std std-term">child command</em></a>‘s to be used.</div>
<div class="line">So add the following line into your <a class="reference internal" href="/wiki/display/ECFLOW/Understanding+Includes#head-h"><em>head.h</em></a> file before the call to <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecflow-client"><em class="xref std std-term">ecflow_client</em></a> –init</div>
</div>
<p class="last">> export PATH=$PATH:/usr/local/apps/ecflow/current/bin</p>
</div>
<div class="line-block">
<div class="line">You may experience other problems using rsh, caused by standard unix issues.</div>
<div class="line">Make sure that the file $HOME/.rhosts contains a line with your user ID and</div>
<div class="line">the machine where your server is running.</div>
</div>
<p>Modify the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-family"><em class="xref std std-term">family</em></a> f5 so that all its tasks will run on another machine in the classroom</p>
<div class="section" id="text">
<h2>Text<a class="headerlink" href="#text" title="Permalink to this headline">¶</a></h2>
<div class="highlight-python"><pre># Definition of the suite test
suite test
edit ECF_INCLUDE "$HOME/course"
edit ECF_HOME "$HOME/course"
limit l1 2
family f5
edit HOST ??????
edit ECF_JOB_CMD "rsh %HOST% '%ECF_JOB% > %ECF_JOBOUT% 2>&1 &'"
inlimit l1
edit SLEEP 20
task t1
task t2
task t3
task t4
task t5
task t6
task t7
task t8
task t9
endfamily
endsuite</pre>
</div>
<p>If your login shell is csh, you should define ECF_JOB_CMD as:</p>
<div class="highlight-python"><pre>edit ECF_JOB_CMD "rsh %HOST% '%ECF_JOB% >& %ECF_JOBOUT%'"</pre>
</div>
</div>
<div class="section" id="python">
<h2>Python<a class="headerlink" href="#python" title="Permalink to this headline">¶</a></h2>
<p>In python modify the function create_family_f5() created in the earlier page:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/env python2.7</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">ecflow</span>
<span class="k">def</span> <span class="nf">create_family_f5</span><span class="p">()</span> <span class="p">:</span>
<span class="n">f5</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Family</span><span class="p">(</span><span class="s">"f5"</span><span class="p">)</span>
<span class="n">f5</span><span class="o">.</span><span class="n">add_inlimit</span><span class="p">(</span><span class="s">"l1"</span><span class="p">)</span>
<span class="n">f5</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"HOST"</span><span class="p">,</span> <span class="s">"??????"</span><span class="p">)</span>
<span class="n">f5</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_JOB_CMD"</span><span class="p">,</span> <span class="s">"rsh %HOST% '</span><span class="si">%E</span><span class="s">CF_JOB% > </span><span class="si">%E</span><span class="s">CF_JOBOUT% 2>&1 &'"</span><span class="p">)</span>
<span class="n">f5</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"SLEEP"</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span>
<span class="n">f5</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span> <span class="s">"t"</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="p">)</span>
<span class="k">return</span> <span class="n">f5</span>
<span class="k">print</span> <span class="s">"Creating suite definition"</span>
<span class="n">defs</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Defs</span><span class="p">()</span>
<span class="n">suite</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">add_suite</span><span class="p">(</span><span class="s">"test"</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_INCLUDE"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"HOME"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"/course"</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_HOME"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"HOME"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"/course"</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_limit</span><span class="p">(</span><span class="s">"l1"</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_family</span><span class="p">(</span> <span class="n">create_family_f5</span><span class="p">()</span> <span class="p">)</span>
<span class="k">print</span> <span class="n">defs</span>
<span class="k">print</span> <span class="s">"Checking job creation: .ecf -> .job0"</span>
<span class="k">print</span> <span class="n">defs</span><span class="o">.</span><span class="n">check_job_creation</span><span class="p">()</span>
<span class="k">print</span> <span class="s">"Saving definition to file 'test.def'"</span>
<span class="n">defs</span><span class="o">.</span><span class="n">save_as_defs</span><span class="p">(</span><span class="s">"test.def"</span><span class="p">)</span>
</pre></div>
</div>
<p><strong>What to do:</strong></p>
<ol class="arabic simple">
<li>Modify PATH environment variable in head.h</li>
<li>Change the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a></li>
<li>Replace the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a></li>
<li>It may not work immediately. Have a look in the file <tt class="file docutils literal"><span class="pre">$HOME/course/</span><em><span class="pre">host</span></em><span class="pre">.</span><em><span class="pre">port</span></em><span class="pre">.ecf.log</span></tt> to see why.</li>
<li>What do you need to do in order to have the task <strong>/test/f5/t9</strong> run on another machine? Try your solution.</li>
</ol>
</div>
</div>
|