mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-29 01:13:08 +00:00
10e3ce1cdc
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.
63 lines
1.7 KiB
Bash
Executable File
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
|