#!/bin/sh
#
# Usage: choose host1 host2 ... - command [ arguments ]
# Choose the least busy host among  host1, host2, ...
# and then run command (with arguments) on that host.

argument() {
  shift $1
  echo -n "$1"
}

getloads() {
  for H in $HOSTS; do
    for U in `rsh -n $H uptime`; do
      case $U in
        ?.??,) echo "$U $H"; break;;
      esac
    done
  done
}

HOSTS=""
while [ "$1" != "-" ]; do
  HOSTS="$HOSTS $1"
  shift
done
shift

if [ ! -f .choose.done -a ! -f .choose.lock ]; then
  :> .choose.done
fi

trap 'rm .choose.lock' 1 2 15
until mv .choose.done .choose.lock 2>/dev/null; do
  sleep 10
done

HOST=`argument 2 \`getloads | sort | head -1\``
rsh -n "$HOST" "$@" &

sleep 60
mv .choose.lock .choose.done
