#!/bin/sh -


# runaway.sh - Launch a task on any remote node but not home on an OpenMosix cluster

# Author: Jozef Ivanecky, dodo@kanoistika.sk, http://www.ivanecky.sk
# (c) Jozef Ivanecky, all rights reserved.

# OpenMosix is (c) of Moshe Bar http://www.openmosix.com
# Each respective trademark is of its own owner
# This software is distributed under GPL 2 or later


#/* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTY IS ASSUMED.               */
#/* NO LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING            */
#/* FROM THE USE OF THIS SOFTWARE WILL BE ACCEPTED. IT CAN BURN              */
#/* YOUR HARD DISK, ERASE ALL YOUR DATA AND BROKE DOWN YOUR                  */
#/* MICROWAVE OVEN. YOU ARE ADVISED.                                         */


case "$1" in -z)
	flag=-z
	shift
	case $# in 1) 
	echo "runaway.sh - Launch a task on a remote node on an OpenMosix cluster."
	echo "Incorrect syntax. Must provide an argument after '-z'."
	exit 1 
	esac
esac

case $#,"$1" in *,-*|0,*) 
	echo "runaway.sh - Launch a task on a remote node on an OpenMosix cluster."
	echo "Incorrect syntax. Must provide a process."
	exit 1

esac

for i in /proc/hpc/nodes/*
do
 node=`basename $i`
 status=`cat $i/status`
 test $status -eq 3 && unodes="$unodes $node"
done

nodes=`echo $unodes | tr " " "\n" |sort -n |tr "\n" " "`
lnode=`cat /proc/hpc/admin/mospe`
largs=`echo "$lnode $nodes" |awk '{
nlist="-j";
i=2;
while(i<=NF)
{
 if($1==$i) i++;
 if(i>NF) break;
 start=$i;
 while($(i+1)==$i+1 && $1!=$(i+1)) i++;
 end=$i;
 nlist=sprintf("%s%d-%d,",nlist,start,end);
 i++;
}
sub(/,$/,"",nlist);
print nlist;
}'`

exec /bin/mosrun $largs $flag $*




