diff options
Diffstat (limited to 'modules/acore/startup-scripts/run-engine')
-rw-r--r-- | modules/acore/startup-scripts/run-engine | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/modules/acore/startup-scripts/run-engine b/modules/acore/startup-scripts/run-engine new file mode 100644 index 0000000000..7cecaeb134 --- /dev/null +++ b/modules/acore/startup-scripts/run-engine @@ -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 +} |