1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-29 01:13:08 +00:00
freebsd-ports/Tools/portbuild/scripts/checkmachines
Kris Kennaway 10e3ce1cdc Switch to polling the clients with netcat to collect load stats, instead
of having the clients scp their loads to bento every 10 seconds.  Fix
some indentation and add some sleeps to make sure the startup script
doesn't run too early in the boot process.
2003-05-17 00:20:53 +00:00

63 lines
1.7 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
arches=$*
sleep 60
while true; do
for i in ${arches}; do
mlist=${buildroot}/${i}/mlist
unset DISPLAY
min=99
set $(cat $mlist)
while [ $# -gt 1 ]; do
m=$1
l=$2
if (nc -w 5 $m infoseek > ${buildroot}/${i}/loads/$m < /dev/null); then
num=$(awk '{print $1}' ${buildroot}/${i}/loads/$m)
if [ "x$num" = "x" ]; then
# logger "checkmachines: file ${buildroot}/${i}/loads/$m is empty"
num=99
fi
else
num=99
fi
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}/${i}/ulist
done
sleep 15
done