Improved run engine and moved on separated module

+ Also added some example script to create your own
restart script
This commit is contained in:
Yehonal 2016-09-01 13:21:02 +02:00
parent 3704829d65
commit 9466e0c21c
9 changed files with 202 additions and 72 deletions

View file

@ -0,0 +1,36 @@
# enable/disable GDB execution
export GDB_ENABLED=0
# gdb file
export GDB=""
# directory where binary are stored
export BINPATH=""
### Put here the pid you configured on your worldserver.conf file ###
export SERVERPID=""
# path to conf file
export CONFIG=""
# path of log files
export LOGS_PATH="";
# exec name
export SERVERBIN=""
# prefix name for log files
export LOG_PREFIX_NAME=""
# name of screen service ( for restarter )
# if no specified, screen util won't be used
export SCREEN_NAME=""
# overwrite default screen options: -A -m -d -S
export SCREEN_OPTIONS=""
# enable it to show the output
# within console
export WITH_CONSOLE=0

View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
$PATH_RUNENGINE=""
source $PATH_RUNENGINE/run-engine
# you must create your conf
# copying conf.sh.dist
# and renaming as below
source ./conf-auth.sh
restarter

View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
$PATH_RUNENGINE=""
source $PATH_RUNENGINE/run-engine
# you must create your conf
# copying conf.sh.dist
# and renaming as below
source ./conf-world.sh
restarter

View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
$PATH_RUNENGINE=""
source $PATH_RUNENGINE/run-engine
# you must create your conf
# copying conf.sh.dist
# and renaming as below
source ./conf-auth.sh
starter

View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
$PATH_RUNENGINE=""
source $PATH_RUNENGINE/run-engine
# you must create your conf
# copying conf.sh.dist
# and renaming as below
source ./conf-world.sh
starter

View file

@ -0,0 +1,102 @@
export RUN_ENGINE_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# load default conf
if [ -e "$RUN_ENGINE_PATH/conf.dist" ]; then
source "$RUN_ENGINE_PATH/conf.sh.dist"
fi
function configureFiles() {
TRACE_BEGIN_STRING="SIGSEGV"
TRACE_FILE="$LOGS_PATH/"$LOG_PREFIX_NAME"_trace.log"
ERR_FILE="$LOGS_PATH/"$LOG_PREFIX_NAME"_error.log"
SYSLOG="$LOGS_PATH/"$LOG_PREFIX_NAME"_system.log"
SYSERR="$LOGS_PATH/"$LOG_PREFIX_NAME"_system.err"
LINKS_FILE="$LOGS_PATH/"$LOG_PREFIX_NAME"_crash_links.link"
}
function checkStatus() {
local ret=1
# wipe do : destroy old screens + ls
screen -wipe
if screen -ls $1 | grep -q "No Sockets found"
then
return 0
fi
local gdbres=$(pgrep -f "gdb -x $GDB --batch $SERVERBIN")
if [[ $GDB_ENABLED -eq 0 && -z $gdbres ]]; then
return 0
fi
#
# This is a specific check for Azeroth Core in case of screen failure
# It is possible since same binary file cannot be launched with same configuration file
# This is an extra check
#
local binres=$(pgrep -f "$SERVERBIN -c $CONFIG")
if [ -z $binres ]; then
return 0
fi
return 1
}
function run() {
echo $1
if [ ! -z $1 ]; then
local OPTIONS="-A -m -d -S"
if [ ! -z "$SCREEN_OPTIONS" ]; then
OPTIONS=$SCREEN_OPTIONS
fi
echo "> Starting with screen ( screen $OPTIONS )"
screen $OPTIONS $1 "$RUN_ENGINE_PATH/starter" $2 $3 "$4" "$5" "$6" $7
else
$RUN_ENGINE_PATH/starter $2 $3 "$4" "$5" "$6" $7
fi
}
function starter() {
cd $BINPATH
mkdir -p "$LOGS_PATH"
configureFiles
run "$SCREEN_NAME" "$SERVERBIN" "$GDB" "$CONFIG" "$SYSLOG" "$SYSERR" "$GDB_ENABLED"
}
function restarter() {
cd $BINPATH
mkdir -p "$LOGS_PATH"
configureFiles
if [ ! -f $TRACE_FILE ]; then
touch $TRACE_FILE
fi
while :
do
if checkStatus $SCREEN_NAME; then
DATE=$(date)
echo "Restarting $SCREEN_NAME Core blizz($DATE)"
if [ $GDB_ENABLED -eq 1 ]; then
echo "GDB enabled"
grep -B 10 -A 1800 "$TRACE_BEGIN_STRING" "$SYSLOG" >> "$TRACE_FILE"
cat "$SYSERR" > "$ERR_FILE"
run "$SCREEN_NAME" "$SERVERBIN" "$GDB" "$CONFIG" "$SYSLOG" "$SYSERR" 1
fi
if [ $GDB_ENABLED -eq 0 ]; then
echo "GDB disabled"
run "$SCREEN_NAME" "$SERVERBIN" null "$CONFIG" null null 0
fi
fi
sleep 10
done
}

View file

@ -0,0 +1,27 @@
#!/usr/bin/env bash
GDB_FILE="$2"
CONFIG="$3"
SYSLOG="$4"
SYSERR="$5"
GBD_ENABLED="$6"
if [ $GBD_ENABLED -eq 1 ]; then
echo "set logging on" > "$GDB_FILE"
echo "set debug timestamp" >> "$GDB_FILE"
echo "run -c $3" >> "$GDB_FILE"
echo "bt" >> "$GDB_FILE"
[ ! -f "$SYSLOG" ] && touch "$SYSLOG"
[ ! -f "$SYSERR" ] && touch "$SYSERR"
if [ $WITH_CONSOLE -eq 0 ]; then
gdb -x $GDB_FILE --batch $1 >> "$SYSLOG" 2>> "$SYSERR"
else
echo "> Console enabled"
gdb -x $GDB_FILE --batch $1 > >(tee ${SYSLOG}) 2> >(tee ${SYSERR} >&2)
fi
elif [ $GBD_ENABLED -eq 0 ]; then
"./$1" -c "$CONFIG"
fi