Various improvements for the server scripts

Respect server options given as script arguments.
Fix killing background process in trap.
Use printf instead of echo.
Keep upper case variable names reserved for env variables.
Logfilter scripts converted to sed -E and removed GNUisms.
This commit is contained in:
Gunter Labes 2024-04-14 21:42:10 +02:00
parent 3dadec9cac
commit 0222fdad50
No known key found for this signature in database
GPG key ID: C0C7B971CC910216
8 changed files with 181 additions and 147 deletions

View file

@ -1,9 +1,11 @@
#!/bin/sed -f
s/\t/ /g
#!/bin/sed -Ef
# 20221025 05:35:29 info server: 2601:243:4101:5740:4c58:4587:3b8e:d151 <nick> message
s/ / /g
# skip over irregular lines
/^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+:/!d
/^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+:/!d
# remove the timestamp and the IP
s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
#s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
s/^(PREV: |OLD: |)[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+: [[:xdigit:].:]+ +/\1/
s/ info server://
s/""/"/g
/^<[a-zA-Z0-9_-]\+ .*>$\|^<[a-zA-Z0-9_-]\+>\|^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] \(<server>\|Statistics:\) \|^[a-zA-Z0-9_-]\+ \(\(started\( reloaded\|\)\|advanced\|ended\) game: \|ended game: .* and disconnected.\)/!d
/^<[[:alnum:]_-]+ .*>$|^<[[:alnum:]_-]+>|^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] (<server>|Statistics:) |^[[:alnum:]_-]+ ((started( reloaded|)|advanced|ended) game: |ended game: .* and disconnected\.)/!d

View file

@ -1,25 +1,27 @@
#!/bin/sed -f
s/\t/ /g
#!/bin/sed -Ef
# 20221025 05:35:29 info server: 2601:243:4101:5740:4c58:4587:3b8e:d151 <nick> message
s/ / /g
# skip over irregular lines
/^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+:/!d
/^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+:/!d
# remove the timestamp and the IP
s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
#s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
s/^(PREV: |OLD: |)[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+: [[:xdigit:].:]+ +/\1/
s/ info server://
s/""/"/g
# reset t
ta;:a
/^<[a-zA-Z0-9_-]\+ .*>$\|^<[a-zA-Z0-9_-]\+>\|^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] \(<server>\|Statistics:\) \|^[a-zA-Z0-9_-]\+ \(\(started\( reloaded\|\)\|advanced\|ended\) game: \|ended game: .* and disconnected.\)/!d
s/^\([0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9]\) <server>/14\1 <05server14>05/;t
s/^<\([a-zA-Z0-9_-]\+\) \(.*\)>$/14<12\1 \214>/;t
s/^<\([a-zA-Z0-9_-]\+\)>/ 14<12\114>6/;talign
s/^[a-zA-Z0-9_-]\+ started game: /03&/;t
s/^\([a-zA-Z0-9_-]\+\) started reloaded game: /03\1 started reloaded game: /;t
s/^[a-zA-Z0-9_-]\+ advanced game: /03&/;t
s/^[a-zA-Z0-9_-]\+ ended game: /05&/;t
s/^[a-zA-Z0-9_-]\+ \(has logged o\|.* and disconnected.\)/14&/;t
s/^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] Statistics:/14&/;t
/^<[[:alnum:]_-]+ .*>$|^<[[:alnum:]_-]+>|^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] (<server>|Statistics:) |^[[:alnum:]_-]+ ((started( reloaded|)|advanced|ended) game: |ended game: .* and disconnected\.)/!d
s/^([0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9]) <server>/14\1 <05server14>05/;t
s/^<([[:alnum:]_-]+) (.*)>$/14<12\1 \214>/;t
s/^<([[:alnum:]_-]+)>/ 14<12\114>6/;talign
s/^[[:alnum:]_-]+ started game: /03&/;t
s/^([[:alnum:]_-]+) started reloaded game: /03\1 started reloaded game: /;t
s/^[[:alnum:]_-]+ advanced game: /03&/;t
s/^[[:alnum:]_-]+ ended game: /05&/;t
s/^[[:alnum:]_-]+ (has logged o|.* and disconnected.)/14&/;t
s/^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] Statistics:/14&/;t
b
# right align with nick length of 20 in mind -> 22 spaces (20 + <>) -> .\{27\} (colors + <)
# right align with nick length of 20 in mind -> 22 spaces (20 + <>) -> .{27} (colors + <)
:align
s/^ *\(.\{27\}14>\)/\1/
s/^ *(.{27}14>)/\1/

View file

@ -1,7 +1,11 @@
#!/bin/sed -f
s/\t/ /g
#!/bin/sed -Ef
# 20221025 05:35:29 info server: 2601:243:4101:5740:4c58:4587:3b8e:d151 <nick> message
s/ / /g
# skip over irregular lines
/^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+:/!d
# remove the timestamp and the IP
s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
#s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
s/^(PREV: |OLD: |)[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+: [[:xdigit:].:]+ +/\1/
s/ info server://
s/""/"/g
/^<\(.*\)>$\|^<[a-zA-Z0-9_-]\+>\|^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] \(<server>\|Statistics:\) \|^[a-zA-Z0-9_-]\+ \(\(started\( reloaded\|\)\|advanced\|ended\) game: \|.* and disconnected.\|has logged o\)/!d
/^<(.*)>$|^<[[:alnum:]_-]+>|^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] (<server>|Statistics:) |^[[:alnum:]_-]+ ((started( reloaded|)|advanced|ended) game: |.* and disconnected\.|has logged o)/!d

View file

@ -1,17 +1,20 @@
#!/bin/sed -f
s/\t/ /g
#!/bin/sed -Ef
# 20221025 05:35:29 info server: 2601:243:4101:5740:4c58:4587:3b8e:d151 <Tourgus> can you believe this shit
s/ / /g
# skip over irregular lines
/^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+:/!d
# remove the timestamp and the IP
s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
#s/^\(PREV: \|OLD: \|\)[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [a-zA-Z]\+ [a-zA-Z]\+: [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ /\1/
s/^(PREV: |OLD: |)[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [[:alpha:]]+ [[:alpha:]]+: [[:xdigit:].:]+ +/\1/
s/ info server://
s/""/"/g
/^<\(.*\)>$\|^<[a-zA-Z0-9_-]\+>\|^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] \(<server>\|Statistics:\) \|^[a-zA-Z0-9_-]\+ \(\(started\( reloaded\|\)\|advanced\|ended\) game: \|.* and disconnected.\|has logged o\)/!d
s/^\([0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9]\) <server>/14\1 <05server14>05/
s/^<\([a-zA-Z0-9_-]\+\) \(.*\)>$/14<12\1 \214>/
s/^<\([a-zA-Z0-9_-]\+\)>/ 14<12\114>6/;s/ *\(.\{27\}14>\)/\1/
s/^[a-zA-Z0-9_-]\+ started game: .*$/03&/
s/^[a-zA-Z0-9_-]\+ started reloaded game: .*$/03&/
s/^[a-zA-Z0-9_-]\+ advanced game: .*$/03&/
s/^[a-zA-Z0-9_-]\+ ended game: .*$/05&/
s/^[a-zA-Z0-9_-]\+ \(has logged o\|.* and disconnected.\).*$/14&/
s/^[0-9]\+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] Statistics:.*$/14&/
/^<[[:alnum:]_-]+ .*>$|^<[[:alnum:]_-]+>|^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] (<server>|Statistics:) |^[[:alnum:]_-]+ ((started( reloaded|)|advanced|ended) game: |.* and disconnected\.|has logged o)/!d
s/^([0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9]) <server>/14\1 <05server14>05/
s/^<([[:alnum:]_-]+) (.*)>$/14<12\1 \214>/
s/^<([[:alnum:]_-]+)>/ 14<12\114>6/;s/ *(.{27}14>)/\1/
s/^[[:alnum:]_-]+ started game: .*$/03&/
s/^[[:alnum:]_-]+ started reloaded game: .*$/03&/
s/^[[:alnum:]_-]+ advanced game: .*$/03&/
s/^[[:alnum:]_-]+ ended game: .*$/05&/
s/^[[:alnum:]_-]+ (has logged o|.* and disconnected.).*$/14&/
s/^[0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] Statistics:.*$/14&/

View file

@ -1,4 +1,12 @@
#!/bin/sh
#!/bin/bash
#
# Rewrites server config files to switch to a new version and makes
# the server re-read those config files. Also sends a server messages
# to announce the new version.
# Has logic to handle a temporary server for the (now) previous version.
#
# Option -n can be used to do a "dry run".
die() { echo >&2 "$@"; exit 1; }
[ $# -ge 1 ] || die "Syntax: $0 [-n] <new minor version>"
set -o errexit
@ -7,41 +15,46 @@ set -x
echo=""
[ "$1" = "-n" ] && { echo=echo; shift; }
[ $1 -ge 1 ] || die "New version must be at least 1!"
[ "$1" -ge 1 ] || die "New version must be at least 1!"
DEV_VERSION=$(readlink $HOME/servers/dev)
NEW_VERSION=$DEV_VERSION.$1
PREV_VERSION=$DEV_VERSION.$(($1-1))
PPREV_VERSION=$DEV_VERSION.$(($1-2))
NEXT_VERSION=$DEV_VERSION.$(($1+1))
DEV_SERVER_CONFIG=$HOME/servers/$DEV_VERSION/wesnothd.cfg
PREV_SERVER_CONFIG=$HOME/servers/$DEV_VERSION-prev/wesnothd.cfg
PREV_SERVER_REDIRECT=$HOME/servers/$DEV_VERSION-prev/redirect.cfg
dev_version=$(readlink "$HOME/servers/dev")
dev_version_re=${dev_version//./\\.}
new_version=$dev_version.$1
new_version_re=${new_version//./\\.}
prev_version=$dev_version.$(($1-1))
prev_version_re=${prev_version//./\\.}
pprev_version=$dev_version.$(($1-2))
pprev_version_re=${pprev_version//./\\.}
next_version=$dev_version.$(($1+1))
dev_server_config=$HOME/servers/$dev_version/wesnothd.cfg
prev_server_config=$HOME/servers/$dev_version-prev/wesnothd.cfg
prev_server_redirect=$HOME/servers/$dev_version-prev/redirect.cfg
PREV=no
test -w $PREV_SERVER_CONFIG && PREV=yes
[ $PREV = no -o $1 -gt 1 ] || die "New version must be greater than 1 when using a previous version server!"
prev=no
test -w "$prev_server_config" && prev=yes
[ "$prev" = no ] || [ "$1" -gt 1 ] || die "New version must be greater than 1 when using a previous version server!"
SERVER_MESSAGE="Version $NEW_VERSION has been released! Update now! (You need the new version in order to join this server again.)"
[ $PREV = yes ] && SERVER_MESSAGE="Version $NEW_VERSION has been released! New users with the previous version will now get redirected to a temporary server that will run until binaries for all major OSes are out."
server_message="Version $new_version has been released! Update now! (You need the new version in order to join this server again.)"
[ "$prev" = yes ] && server_message="Version $new_version has been released! New users with the previous version will now get redirected to a temporary server that will run until binaries for all major OSes are out."
#if ! ps -C wesnothd-$DEV_VERSION-prev>/dev/null; then
#if ! ps -C wesnothd-$dev_version-prev>/dev/null; then
# echo "Previous server isn't running!"
# exit 1
#fi
[ $PREV = yes ] && $echo sed -i -e "/versions_accepted=/s/$PPREV_VERSION/$PREV_VERSION/" $PREV_SERVER_CONFIG
[ $PREV = yes ] && $echo sed -i -e "/motd=/s/$PREV_VERSION/$NEW_VERSION/g" $PREV_SERVER_CONFIG
# Handle the 15 character limit for process names of /proc/<pid>/stat
reread_config() { $echo pkill -HUP "${1:0:15}"; }
[ "$prev" = yes ] && $echo sed -i "/versions_accepted=/s/$pprev_version_re/$prev_version/;/motd=/s/$prev_version_re/$new_version/g" "$prev_server_config"
# reload the config
[ $PREV = yes ] && $echo killall -HUP wesnothd-$DEV_VERSION-prev
[ "$prev" = yes ] && reread_config "wesnothd-$dev_version-prev"
# check if we currently allow the previous version to prevent announcing the same version twice
grep "versions_accepted=.*$PREV_VERSION" $DEV_SERVER_CONFIG || die "Previous version $PREV_VERSION currently not accepted. Announcing the right version? Aborting..."
$echo sed -i -e "/versions_accepted=/{s/$NEW_VERSION/$NEXT_VERSION/;s/$PREV_VERSION/$NEW_VERSION/}" $DEV_SERVER_CONFIG
$echo sed -i -e "/motd=/s/$PREV_VERSION/$NEW_VERSION/g" $DEV_SERVER_CONFIG
grep "versions_accepted=.*${prev_version//./\\.}" "$dev_server_config" || die "Previous version $prev_version currently not accepted. Announcing the right version? Aborting..."
$echo sed -i "s/^id=.*/id=$new_version/;/^versions_accepted=/{s/$new_version_re/$next_version/;s/$prev_version_re/$new_version/};/motd=/s/$prev_version_re/$new_version/g" "$dev_server_config"
# update previous version redirect
[ $PREV = yes ] && $echo sed -i -e "/\[redirect\]/N;/version=/s/$PPREV_VERSION/$PREV_VERSION/" $PREV_SERVER_REDIRECT
[ $PREV = yes ] && $echo sed -i -e "s,#\({./$DEV_VERSION-prev-redirect.cfg}\),\1," $DEV_SERVER_CONFIG
[ "$prev" = yes ] && $echo sed -i "/version=/s/$pprev_version_re/$prev_version/" "$prev_server_redirect"
[ "$prev" = yes ] && $echo sed -i "s,#\({./$dev_version_re-prev-redirect.cfg}\),\1," "$dev_server_config"
# reload the config
$echo killall -HUP wesnothd-$DEV_VERSION
$echo $HOME/bin/send_server_message $DEV_VERSION "$SERVER_MESSAGE"
reread_config "wesnothd-$dev_version"
$echo "$HOME/bin/send_server_message" "$dev_version" "$server_message"

View file

@ -2,100 +2,103 @@
die() { printf '%s\n' "$*" >&2; exit 1; }
dietail() {
printf '%s\n' "$*" >&2
printf 'tail %s:\n' "$LOG" >&2
tail "$SERVERBASE/logs/$LOG"
printf 'tail %s:\n' "$log" >&2
tail "$serverbase/logs/$log"
exit 1
}
[ $# -ge 1 ] || die "Syntax: $(basename "$0") <server version> [--test] [<additional parameters for wesnothd>]"
set -o nounset
set -o noclobber
SERVER=$1
SERVERBASE="$HOME/servers/$SERVER"
[ -d "$SERVERBASE" ] || die "Server '$SERVER' not found."
[ -d "$SERVERBASE"/logs ] || mkdir "$SERVERBASE"/logs
[ -d "$SERVERBASE"/replays ] || mkdir "$SERVERBASE"/replays
server=$1
serverbase="$HOME/servers/$server"
[ -d "$serverbase" ] || die "Server '$server' not found."
[ -d "$serverbase"/logs ] || mkdir "$serverbase"/logs
[ -d "$serverbase"/replays ] || mkdir "$serverbase"/replays
shift
if [ $# -ge 1 ] && [ "$1" = "--test" ]; then
shift
cd "$SERVERBASE"/build || exit 1
bin/wesnothd-$SERVER -c "$SERVERBASE"/wesnothd.cfg --port 15001 "$@"
cd "$serverbase"/build || exit 1
bin/wesnothd-"$server" -c "$serverbase"/wesnothd.cfg --port 15001 "$@"
# remove the socket so it looks like we never ran the server
rm var/run/socket
exit 0
fi
PORT=15000
case $SERVER in
port=15000
case $server in
1.4|1.8)
PORT=14998
set -- --threads 8;;
1.6) PORT=14999
set -- --threads 8;;
1.5*) PORT=14999
set -- --threads 16;;
1.7*) PORT=14997
set -- --threads 16;;
port=14998
set -- --threads 8 "$@";;
1.6) port=14999
set -- --threads 8 "$@";;
1.5*) port=14999
set -- --threads 16 "$@";;
1.7*) port=14997
set -- --threads 16 "$@";;
1.9*|1.10*)
PORT=14996
set -- --threads 8;;
port=14996
set -- --threads 8 "$@";;
1.12*)
set -- --threads 30;;
1.1[346]*)
set -- --keepalive;;
set -- --threads 30 "$@";;
1.1[3468]*)
set -- --keepalive "$@";;
trunk)
set -- --keepalive --log-debug=sql_executor;;
set -- --keepalive --log-debug=sql_executor "$@";;
*)
printf 'Unrecognized version %s, using default options...\n' "$server"
set -- --keepalive "$@";;
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
#trap "$HOME/bin/send_server_message $server; sleep 2; echo -n 'terminated: '; date; exit 0" INT
trap 'printf "terminated: "; date; exit' INT
while true
do
cd "$SERVERBASE"/build || exit 1
[ -x bin/wesnothd-$SERVER ] || die "Executable 'bin/wesnothd-$SERVER' not found."
cd "$serverbase"/build || exit 1
[ -x "bin/wesnothd-$server" ] || die "Executable 'bin/wesnothd-$server' not found."
DATE=$(date +"%Y%m%d-%H%M%S")
[ -r "$SERVERBASE"/redirect.cfg ] && PORT=$(sed -nE '/port=/s/[[:blank:]]*port="?([0-9]+)"?/\1/p' "$SERVERBASE"/redirect.cfg)
BUILDDIR=$(readlink "$SERVERBASE"/build)
#REV=r$(echo $BUILDDIR | sed -nre "s,.*wesnothd-svn-([0-9:SM]+)_$SERVER$,\1,p")
REV=${BUILDDIR#*wesnothd-*-git-}
LOG="wesnothd.$DATE.$REV.log"
bin/wesnothd-$SERVER -c "$SERVERBASE"/wesnothd.cfg --port "$PORT" "$@" > "$SERVERBASE/logs/$LOG" 2>&1 &
PID=$!
trap 'kill -s INT "$PID"; trap - INT; kill -s INT "$$"' INT # kill backgrounded wesnothd on INT and properly die from the signal
echo "started $SERVER server with command: 'wesnothd-$SERVER -c \"$SERVERBASE\"/wesnothd.cfg --port $PORT $*' (commit: $REV, pid: $PID) logging to: $LOG"
date=$(date +"%Y%m%d-%H%M%S")
[ -r "$serverbase"/redirect.cfg ] && port=$(sed -nE '/port=/s/[[:blank:]]*port="?([0-9]+)"?/\1/p' "$serverbase"/redirect.cfg)
builddir=$(readlink "$serverbase"/build)
#rev=r$(echo $builddir | sed -nre "s,.*wesnothd-svn-([0-9:SM]+)_$server$,\1,p")
rev=${builddir#*wesnothd-*-git-}
log="wesnothd.$date.$rev.log"
bin/wesnothd-"$server" -c "$serverbase"/wesnothd.cfg --port "$port" "$@" > "$serverbase/logs/$log" 2>&1 &
pid=$!
trap 'kill "$pid"; trap - INT; kill -s INT "$$"' INT # kill backgrounded wesnothd on INT (background processes ignores INT so kill with TERM) and properly die from the signal
printf 'started %s server with command: '\''wesnothd-%s -c "%s"/wesnothd.cfg --port %s %s'\'' (commit: %s, pid: %s) logging to: %s\n' "$server" "$server" "$serverbase" "$port" "$*" "$rev" "$pid" "$log"
# wait a bit in case the process dies immediately
sleep 5
if ps -p $PID > /dev/null 2>&1
if kill -0 "$pid"
then # create some convenient links
ln -s "$SERVERBASE/logs/$LOG" "$LOG.$PID"
rm -f "$SERVERBASE"/old.log "$SERVERBASE"/old.pid
mv "$SERVERBASE"/current.log "$SERVERBASE"/old.log > /dev/null 2>&1
mv "$SERVERBASE"/current.pid "$SERVERBASE"/old.pid > /dev/null 2>&1
echo $PID > "$SERVERBASE"/current.pid
ln -s "logs/$LOG" "$SERVERBASE"/current.log
ln -s "$serverbase/logs/$log" "$log.$pid"
rm -f "$serverbase"/old.log "$serverbase"/old.pid
mv "$serverbase"/current.log "$serverbase"/old.log > /dev/null 2>&1
mv "$serverbase"/current.pid "$serverbase"/old.pid > /dev/null 2>&1
printf %s "$pid" > "$serverbase"/current.pid
ln -s "logs/$log" "$serverbase"/current.log
fi
# wait for the server to terminate
wait $PID
EXIT_CODE=$?
printf '%s wesnothd exited with code: %s\n' "$(date +'%Y%m%d %T')" "$EXIT_CODE"
wait "$pid"
exit_code=$?
printf '%s wesnothd exited with code: %s\n' "$(date +'%Y%m%d %T')" "$exit_code"
trap - INT
# 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 2>&1
mv "$serverbase/$builddir/gmon.out" "$serverbase/$builddir/gmon.$date.$rev.out" > /dev/null 2>&1
# check for return code if not zero or 98 (port in use) the server should be restarted
case $EXIT_CODE in
0) exit ;;
case $exit_code in
0) exit ;;
98|127|128) dietail ;; #Could not bind to port #Command not found #Invalid argument to exit
esac
printf '%s tail %s:\n' "$(date +'%Y%m%d %T')" "$LOG"
tail "$SERVERBASE/logs/$LOG"
printf '%s tail %s:\n' "$(date +'%Y%m%d %T')" "$log"
tail "$serverbase/logs/$log"
echo
done

View file

@ -1,26 +1,32 @@
#!/bin/sh
die() { echo >&2 "$@"; exit 1; }
notfound() { echo >&2 "$SOCKET not found, sending to the '$1'."; SOCKET=$SERVERBASE/$1/var/run/socket; }
die() { printf '%s\n' "$*" >&2; exit 1; }
notfound() { printf '%s not found, sending to the "%s".\n' "$fifo" "$1" >&2; fifo=$serverbase/$1/var/run/socket; }
[ $# -ge 1 ] || die "Syntax: $0 <server version> <command [arguments]>"
SERVER=$1
SERVERBASE=$HOME/servers/$SERVER
SOCKET=$SERVERBASE/build/var/run/socket
[ -d "$SERVERBASE" ] || die "Server '$SERVER' not found."
[ -e $SOCKET ] || { notfound oldbuild; [ -e $SOCKET ] || notfound revertedbuild; }
[ -p $SOCKET ] || die "$SOCKET is not a named pipe (fifo).
Is the $SERVER server running?"
server=$1
serverbase=$HOME/servers/$server
fifo=$serverbase/build/var/run/socket
shift
echo "$@" > $SOCKET
[ -d "$serverbase" ] || die "Server '$server' not found."
[ -e "$fifo" ] || { notfound oldbuild; [ -e "$fifo" ] || notfound revertedbuild; }
[ -p "$fifo" ] || die "$fifo is not a named pipe (fifo).
Is the $server server running?"
printf '%s\n' "$*" > "$fifo"
# hack to start the irc echo for the old instance on a restart
case "$1" in
case $server in
restart*)
# delay for a bit to make sure we get the right log file since log rotation is also delayed
sleep 10
screen -S wesnoth-mp-servers -X eval "select lobby-echo" "stuff \"/wl-old $SERVER\012\"" ;;
irc_echo() {
sleep 10 # delay for a bit to make sure we get the right log file since log rotation is also delayed
screen -S wesnoth-mp-servers -X eval 'select lobby-echo' "stuff \"/wl-old $1\012\""
}
case $server in
dev|trunk) ;;
stable) irc_echo stable;;
oldstable) irc_echo oldstable;;
esac;;
esac

View file

@ -1,24 +1,25 @@
#!/bin/sh
die() { echo >&2 "$@"; exit 1; }
notfound() { echo >&2 "$SOCKET not found, sending to the '$1'."; SOCKET=$SERVERBASE/$1/var/run/socket; }
die() { printf '%s\n' "$*" >&2; exit 1; }
notfound() { printf '%s not found, sending to the "%s".\n' "$fifo" "$1" >&2; fifo=$serverbase/$1/var/run/socket; }
[ $# -ge 1 ] || die "Syntax: $0 <server version> [<message>]"
SERVER=$1
SERVERBASE=$HOME/servers/$SERVER
SOCKET=$SERVERBASE/build/var/run/socket
[ -d "$SERVERBASE" ] || die "Server '$SERVER' not found."
server=$1
serverbase=$HOME/servers/$server
fifo=$serverbase/build/var/run/socket
shift
[ -d "$serverbase" ] || die "Server '$server' not found."
if [ "$*" = "" ]; then
message="The server will get restarted now. Please don't forget to save your game!"
echo "Sending standard message: $message"
printf 'Sending standard message: \n' "$message"
else
message=$*
fi
[ -e $SOCKET ] || { notfound oldbuild; [ -e $SOCKET ] || notfound revertedbuild; }
[ -p $SOCKET ] || die "$SOCKET is not a named pipe (fifo).
Is the $SERVER server running?"
[ -e "$fifo" ] || { notfound oldbuild; [ -e "$fifo" ] || notfound revertedbuild; }
[ -p "$fifo" ] || die "$fifo is not a named pipe (fifo).
Is the $server server running?"
echo "msg $message" > $SOCKET
printf 'msg %s\n' "$message" > "$fifo"