<br><br><div class="gmail_quote">On Fri, Jul 4, 2008 at 1:00 AM, Garrick Staples &lt;<a href="mailto:garrick@usc.edu">garrick@usc.edu</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Fri, Jul 04, 2008 at 12:27:45AM -0400, Glen Beane alleged:<br>
<div><div></div><div class="Wj3C7c">&gt; On Wed, Jul 2, 2008 at 2:07 PM, Corey Ferrier &lt;<a href="mailto:coreyf@clemson.edu">coreyf@clemson.edu</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; On Wed, Jul 02, 2008 at 10:39:23AM -0700, David Sheen wrote:<br>
&gt; &gt; &gt;The parallel programming environments we use (e.g. MPICH) use SSH to<br>
&gt; &gt; &gt;create processes on the sister nodes. &nbsp;If these jobs fail (are<br>
&gt; &gt; &gt;deleted, the mother node crashes, etc), the spawned processes remain<br>
&gt; &gt; &gt;on the sisters and eventually someone has to go and clean them out.<br>
&gt; &gt; &gt;Is there any way to use epilogue scripts to keep track of these<br>
&gt; &gt; &gt;processes and make sure they get killed properly if they need to be?<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Because we do not place execution limits on nodes<br>
&gt; &gt; (users can have multiple jobs running on the same node<br>
&gt; &gt; and multiple users can be using the same node),<br>
&gt; &gt; we use an epilogue script which calls another script<br>
&gt; &gt; to clean up leftover processes based on the jobid.<br>
&gt; &gt;<br>
&gt; &gt; Here is the epilogue script, which runs on the mother superior node<br>
&gt; &gt; and executes as root.<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; #!/bin/bash<br>
&gt; &gt; &nbsp; JOBID=$1<br>
&gt; &gt; &nbsp; JOBUSER=$2<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; # get nodes involved in this job<br>
&gt; &gt; &nbsp; nodelist=/var/spool/torque/aux/$JOBID<br>
&gt; &gt; &nbsp; if [ -r $nodelist ] ; then<br>
&gt; &gt; &nbsp; &nbsp; nodes=$(sort $nodelist | uniq)<br>
&gt; &gt; &nbsp; else<br>
&gt; &gt; &nbsp; &nbsp; nodes=localhost<br>
&gt; &gt; &nbsp; fi<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; # for each node involved in the job<br>
&gt; &gt; &nbsp; # kill any pids leftover from that job<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; for i in $nodes ; do<br>
&gt; &gt; &nbsp; &nbsp; ssh $i &quot;su -c &#39;/var/spool/torque/mom_priv/cleanup $JOBID&#39; $JOBUSER&quot;<br>
&gt; &gt; &nbsp; done<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Here is the &#39;cleanup&#39; script:<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; #!/bin/bash<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; # look in the /proc process structure and<br>
&gt; &gt; &nbsp; # kill all pids associated with the passed in $JOBID<br>
&gt; &gt; &nbsp; # this script is run as the user, not root<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; TOKILL=$1<br>
&gt; &gt; &nbsp; [ -z &quot;${TOKILL}&quot; ] &amp;&amp; exit 1<br>
&gt; &gt; &nbsp; ME=`whoami`<br>
&gt; &gt; &nbsp; cd /<br>
&gt; &gt; &nbsp; find /proc -noleaf -maxdepth 2 -name environ -user $ME |<br>
&gt; &gt; &nbsp; while read x; do<br>
&gt; &gt; &nbsp; &nbsp; PBS_JOBID=&quot;&quot;<br>
&gt; &gt; &nbsp; &nbsp; if [ -e $x ]; then<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; pid=$(basename $(dirname $x))<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; if [ -e $x ]; then<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; eval $(cat $x | tr &#39;\0&#39; &#39;\n&#39; | grep PBS_JOBID)<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; if [ &quot;${PBS_JOBID}&quot; == &quot;${TOKILL}&quot; ]; then<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; kill -9 $pid<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; fi<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; fi<br>
&gt; &gt; &nbsp; &nbsp; fi<br>
&gt; &gt; &nbsp; done<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; - Corey<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; such a script shoud be unnecessary if you use a TM-based job launcher for<br>
&gt; whatever flavor of MPI you use, but I guess it doesn&#39;t hurt<br>
<br>
</div></div>Would the script even work? &nbsp;Remote shell processes won&#39;t have PBS_JOBID in the<br>
environment.</blockquote></div><br><br>Thats true, it probably only finds PBS_JOBID in the environment if it was launched with TM in the first place!<br><br>