mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-30 09:51:15 +00:00
81 lines
2.4 KiB
Bash
Executable File
81 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
die() {
|
|
echo >&2 "$@"
|
|
exit 1
|
|
}
|
|
dietail() {
|
|
echo >&2 "$@"
|
|
echo >&2 "tail $LOG:"
|
|
tail $SERVERBASE/logs/$LOG
|
|
exit 1
|
|
}
|
|
[ $# -ge 1 ] || die "Syntax: $0 <server version> [--test] [<additional parameters for wesnothd>]"
|
|
|
|
SERVER=$1
|
|
SERVERBASE=$HOME/servers/$SERVER
|
|
[ -d "$SERVERBASE" ] || die "Server '$VERSION' not found."
|
|
[ -d "$SERVERBASE/logs" ] || mkdir $SERVERBASE/logs
|
|
|
|
shift
|
|
if [ "$1" = "--test" ]; then
|
|
shift
|
|
PARAMETERS=$*
|
|
cd $SERVERBASE/build || exit 1
|
|
bin/wesnothd-$SERVER -c $SERVERBASE/wesnothd.cfg --port 15001 $PARAMETERS
|
|
# remove the socket so it looks like we never ran the server
|
|
rm var/run/socket
|
|
exit 0
|
|
fi
|
|
|
|
PARAMETERS=$*
|
|
THREADS=0
|
|
PORT=15000
|
|
|
|
case $SERVER in
|
|
1.4 ) PORT=14998
|
|
;;
|
|
1.5* ) PORT=14999
|
|
;;
|
|
trunk ) PORT=15000
|
|
;;
|
|
* )
|
|
esac
|
|
|
|
ulimit -Ss 2048
|
|
ulimit -c unlimited
|
|
|
|
# send the standard server message to the appropriate server when killing it with ctrl+c
|
|
trap "$HOME/bin/send_server_message $SERVER; sleep 2; echo -n 'terminated: '; date; exit 0" INT
|
|
|
|
while [ true ]
|
|
do
|
|
cd $SERVERBASE/build || exit 1
|
|
[ -x bin/wesnothd-$SERVER ] || die "Executable 'bin/wesnothd-$SERVER' not found."
|
|
|
|
DATE=$(date +"%Y%m%d-%H%M%S")
|
|
[ ! -f "$SERVERBASE/redirect.cfg" ] || PORT=$(sed -re '/port=/!d;s/[ \t]*port="?([0-9]+)"?/\1/' $SERVERBASE/redirect.cfg)
|
|
BUILDDIR=$(ls -ld $SERVERBASE/build | sed -e 's,.*\(\.\./builds/wesnothd-.*/\),\1,')
|
|
REV=r$(echo "$BUILDDIR" | sed -re "s,.*wesnothd-svn-([0-9:SM]+)_$SERVER/$,\1,")
|
|
LOG="wesnothd.$DATE.$REV.log"
|
|
COMMAND="bin/wesnothd-$SERVER -c $SERVERBASE/wesnothd.cfg --port $PORT --threads $THREADS $PARAMETERS"
|
|
$COMMAND &> "$SERVERBASE/logs/$LOG" &
|
|
|
|
PID=$!
|
|
echo "started $SERVER server with command: '$COMMAND' (revision: $REV, pid: $PID) logging to: $LOG"
|
|
# create some convenient links
|
|
ln -s "$SERVERBASE/logs/$LOG" "$LOG.$PID"
|
|
rm -f $SERVERBASE/old.log
|
|
mv $SERVERBASE/current.log $SERVERBASE/old.log &> /dev/null
|
|
ln -s "logs/$LOG" $SERVERBASE/current.log
|
|
# wait for the server to terminate
|
|
wait $PID
|
|
|
|
EXIT_CODE=$?
|
|
echo "wesnothd exited with code: $EXIT_CODE"
|
|
# need to use the recorded path since the build/ symlink might have changed
|
|
mv "$SERVERBASE/$BUILDDIR/gmon.out" "$SERVERBASE/$BUILDDIR/gmon.$DATE.$REV.out" &> /dev/null
|
|
# check for return code if not zero or 98 (port in use) the server should be restarted
|
|
[ "$EXIT_CODE" != "0" ] || (echo "run_server script shutting down."; exit 0)
|
|
[ "$EXIT_CODE" != "98" ] || dietail #Could not bind to port
|
|
done
|