forked from Lainports/freebsd-ports
decide machines which should be handed new jobs. Also, at some point someone added a note about a possible bug in the reportload script which causes this one to fall over.
60 lines
1.8 KiB
Bash
Executable file
60 lines
1.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Runs in the background on the server. This script keeps track of
|
|
# the relative loads of the client machines, and specifies which machine(s)
|
|
# should be handed new jobs, according to the following algorithm:
|
|
#
|
|
# For each machine listed in ${buildroot}/mlist, check whether its load
|
|
# information has been updated in the last 15 seconds (should be updated by
|
|
# the reportload script every 5 seconds). If so, then divide the number of
|
|
# running jobs on the client by its weighting in mlist, and output the
|
|
# machine(s) with the minimum value to ${buildroot}/ulist.
|
|
#
|
|
# Dividing by the weight has the effect of grouping machines with similar
|
|
# job load (e.g. a weight of 5 will rank machines with job loads 0, 1, 2, 3, 4
|
|
# as the same; if the machines all had a weight of 1 then it would only
|
|
# choose the machine with the least value of the job load, and would probably
|
|
# choose a single machine most of the time).
|
|
|
|
buildroot=/var/portbuild
|
|
mlist=${buildroot}/mlist
|
|
stamp=${buildroot}/loads/.stamp
|
|
|
|
unset DISPLAY
|
|
|
|
while true; do
|
|
touch ${stamp}
|
|
sleep 15
|
|
min=99
|
|
set $(cat $mlist)
|
|
while [ $# -gt 1 ]; do
|
|
m=$1
|
|
l=$2
|
|
if [ -f ${buildroot}/loads/$m -a \
|
|
! -z "$(find ${buildroot}/loads/$m -newer ${stamp})" ]; then
|
|
num=$(awk '{print $1}' ${buildroot}/loads/$m)
|
|
if [ "x$num" = "x" ]; then
|
|
# logger "checkmachines: file ${buildroot}/loads/$m is empty"
|
|
num=99
|
|
fi
|
|
else
|
|
num=99
|
|
fi
|
|
#xxx
|
|
#xxx Need to figure out how this is happening and fix this script
|
|
#xxx accordingly. This is what causes this script to go away on
|
|
#xxx occasion.
|
|
#xxx
|
|
#xxx arith: syntax error: "7:53AM / 5"
|
|
#xxx
|
|
num=$(($num / $l))
|
|
if [ $num -lt $min ]; then
|
|
mach=$m
|
|
min=$num
|
|
elif [ $num = $min ]; then
|
|
mach="$mach $m"
|
|
fi
|
|
shift 2
|
|
done
|
|
echo "$mach" > ${buildroot}/ulist
|
|
done
|