empserver/scripts/keepitup

156 lines
3.2 KiB
Bash

#!/bin/sh
#
# keepitup
# This is a hacked version of "isempireup" by Dave Nye
# Modified for use with the Empire2 server by Ken Stevens 1995
#
# Usage:
# keepitup -kill <game>
# keepitup -start <game> <dir>
# keepitup -check <game> <dir> <port> <coun> <rep>
#
# Portability:
# You may need to put a '-' in front of the ps flags below
_verbose=true
tbase=/tmp/empcheck.$$
trap 'rm -f $FNAMES ; exit' 0 1 2 3 15
putmsg() {
if [ "$_verbose" = "true" ]; then
echo "`date` $*"
fi
}
ERR0="Server EOF"
ERR1="connect: Connection refused"
ERR2="Expecting 2, got unix socket connect: No such file or directory"
MDOWN="The game is down"
FLAGS="-d"
killit() {
FK=${tbase}.kill
FNAMES="$FNAMES ${FK}.L ${FK}.P"
rm -f ${FK}.L ${FK}.P
ps auxw >${FK}.L
egrep "emp_server $FLAGS $1" ${FK}.L | egrep "$USER" >${FK}.P
SZ="`wc -l ${FK}.P | awk '{print $1}' -`"
if [ $SZ -gt 0 ]; then
PIDS=`awk '{rec = rec " " $2} END {print rec}' ${FK}.P`
putmsg "Found pids $PIDS to kill for emp_server $FLAGS"
kill $PIDS
fi
rm -f ${FK}.L ${FK}.P
}
kill9it() {
PROC=$1
FK=${tbase}.kill
FNAMES="$FNAMES ${FK}.L ${FK}.P"
rm -f ${FK}.L ${FK}.P
ps auxw >${FK}.L
egrep "$PROC" ${FK}.L | egrep "$USER" >${FK}.P
SZ="`wc -l ${FK}.P | awk '{print $1}' -`"
if [ $SZ -gt 0 ]; then
PIDS=`awk '{rec = rec " " $2} END {print rec}' ${FK}.P`
putmsg "Found pids " $PIDS " to kill for" $PROC
kill -9 $PIDS
fi
rm -f ${FK}.L ${FK}.P
}
restartgame() {
DIR=$1
UNIQ=$2
killit $UNIQ
sleep 1
cd $DIR/bin
./emp_server $FLAGS $UNIQ &
echo "restarted $UNIQ"
cd $HOME
}
checkgame() {
DIR=$1
PORT=$2
COUN=$3
PASS=$4
EMPIREHOST=`/bin/hostname`
EMPIREPORT=$PORT
COUNTRY=$COUN
PLAYER=$PASS
export EMPIREHOST EMPIREPORT COUNTRY PLAYER
FN=${tbase}.client
rm -f ${FN}.I ${FN}.1 ${FN}.2
FNAMES="$FNAMES ${FN}.I ${FN}.1 ${FN}.2"
echo "quit" >${FN}.I
echo "quit" >${FN}.I
kill9it emp_client
$DIR/bin/emp_client >${FN}.1 2>${FN}.2 <${FN}.I
STAT=$?
ER=`head -1 ${FN}.2`
NORM=`head -1 ${FN}.1`
if [ "$STAT" = "0" ]; then
ALLOK=true
# putmsg "All Ok"
elif [ "$ER" = "$ERR0" ]; then
ALLOK=true
# putmsg "All Ok, but bad return status"
elif [ "$ER" = "$ERR1" ]; then
ALLOK=false
putmsg "emp_server is down"
elif [ "$ER" = "$ERR2" ]; then
ALLOK=false
putmsg "emp_server is down"
else
ALLOK=false
putmsg "Something is wrong"
fi
rm -f ${FN}.I ${FN}.1 ${FN}.2
}
while [ $# -gt 0 ]; do
case "$1" in
# -kill game
"-kill") shift
if [ $# -lt 1 ]; then
echo "Expecting -kill <game>"
exit 1
fi
killit $1
shift ;;
# -start game dir
"-start") shift
if [ $# -lt 2 ]; then
echo "Expecting -start <game> <dir>"
exit 1
fi
restartgame $2 $1
shift ;shift;;
# -check game dir port country user
"-check") shift
if [ $# -lt 5 ]; then
echo "Expecting -check <game> <dir> <port> <tcoun> <tuser>"
exit 1
fi
checkgame $2 $3 $4 $5
if [ "$ALLOK" != "true" ]; then
restartgame $2 $1
fi
shift ; shift ; shift ; shift ; shift ;;
*) echo "Unknown parameter found in: $*."
echo "Aborting."
exit 1 ;;
esac
done