#!/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