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:
parent
3dadec9cac
commit
0222fdad50
8 changed files with 181 additions and 147 deletions
|
@ -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
|
||||
|
|
|
@ -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/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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&/
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue