Files
fail/scripts/client.sh
Christoph Borchert 6e6148f701 client.sh: exit on any error status
This prevents the client script from continuously invoking
the fail-client when it is not executable, e.g., in the case
of missing libraries.

Change-Id: I2746eaf1980507dbd7c95fb5a6a1cc018a33aa67
2014-11-10 15:45:38 +01:00

61 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
#
# client.sh
# Starts a single FailBochs client in an endless loop. Adds ./bochslibs to
# LD_LIBRARY_PATH if existent. Terminates if ./stop exists, or bochs
# terminates with exit status 1.
#
# Prerequisite: All necessary FailBochs ingredients (see multiple-clients.sh)
# in the current directory.
#
rm -f stop
LIBDIR=$PWD/bochslibs
if [ -d $LIBDIR ]
then
export LD_LIBRARY_PATH=$LIBDIR
fi
while [ ! -e stop ]
do
# fiws fairness (don't use this host while someone else is logged in)
# since these pool computers are used by students
# NOTE: this will only work if fail-client terminates from time to time
# TODO: only on Mo-Fr/20h-6h and Sa-So/24h ?
if [[ $(uname -n) == fiws[1-2][0-9][0-9] ]]; then
FIWS_FREE=0
while [ "$FIWS_FREE" -eq 0 ]; do
if [ -e stop ]; then
#repeated exit condition from above
exit 0
fi
FIWS_FREE=1
for user in $(users); do
if [[ "$user" != `whoami` ]]; then
# someone else uses this host, don't do any experiments
FIWS_FREE=0
fi
done
if [ "$FIWS_FREE" -eq 0 ]; then
sleep 300
fi
done
fi
# only start a client if at least 500 MiB is available
FREE_MEM=$(free -m | grep "buffers/cache:" | awk '{print $4}')
if [ $FREE_MEM -lt "500" ]; then
# waiting for free memory. sleep 1-60s and retry.
sleep $(($RANDOM / (32768 / 60) + 1))
else
#nice -n 19 ./bochs -q 2>&1 | tee log.$$.txt | fgrep Result
#nice -n 18 ./bochs -q 2>&1 | fgrep Result
nice -n 18 ./fail-client -q >/dev/null 2>&1
if [ $? -gt 0 ] # exit on any error
then
break
fi
fi
done
echo DONE