From 9466e0c21cd5c226bb0630445720c51632cb458e Mon Sep 17 00:00:00 2001 From: Yehonal Date: Thu, 1 Sep 2016 13:21:02 +0200 Subject: [PATCH] Improved run engine and moved on separated module + Also added some example script to create your own restart script --- bin/compiler/includes/includes.sh | 2 +- bin/runners/run-engine | 70 ------------ modules/acore/startup-scritps/conf.sh.dist | 36 +++++++ .../examples/restarter-auth.sh | 14 +++ .../examples/restarter-world.sh | 14 +++ .../startup-scritps/examples/starter-auth.sh | 14 +++ .../startup-scritps/examples/starter-world.sh | 14 +++ modules/acore/startup-scritps/run-engine | 102 ++++++++++++++++++ .../acore/startup-scritps}/starter | 8 +- 9 files changed, 202 insertions(+), 72 deletions(-) delete mode 100644 bin/runners/run-engine create mode 100644 modules/acore/startup-scritps/conf.sh.dist create mode 100644 modules/acore/startup-scritps/examples/restarter-auth.sh create mode 100644 modules/acore/startup-scritps/examples/restarter-world.sh create mode 100644 modules/acore/startup-scritps/examples/starter-auth.sh create mode 100644 modules/acore/startup-scritps/examples/starter-world.sh create mode 100644 modules/acore/startup-scritps/run-engine rename {bin/runners => modules/acore/startup-scritps}/starter (64%) diff --git a/bin/compiler/includes/includes.sh b/bin/compiler/includes/includes.sh index 24ccf7d78..feafef6f6 100644 --- a/bin/compiler/includes/includes.sh +++ b/bin/compiler/includes/includes.sh @@ -10,7 +10,7 @@ fi function ac_on_after_build() { # move the run engine - cp -rvf "$AC_PATH_BIN/runners/"* "$INSTALL_PATH/bin/" + cp -rvf "$AC_PATH_MODULES/acore/startup-scripts/"* "$INSTALL_PATH/bin/" } registerHooks "ON_AFTER_BUILD" ac_on_after_build diff --git a/bin/runners/run-engine b/bin/runners/run-engine deleted file mode 100644 index 9115abe77..000000000 --- a/bin/runners/run-engine +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -function checkStatus() { - # wipe do : destroy old screens + ls - screen -wipe - if screen -ls $1 | grep -q "No Sockets found" - then - return 0 - else - return 1 - fi -} - -function starter() { - local CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - - cd $BINPATH - - mkdir -p "$LOGS_PATH" - - TRACE_BEGIN_STRING="SIGSEGV" - TRACE_FILE="$LOGS_PATH/"$SCREEN_NAME"_trace.log" - ERR_FILE="$LOGS_PATH/"$SCREEN_NAME"_error.log" - SYSLOG="$LOGS_PATH/"$SCREEN_NAME"_system.log" - SYSERR="$LOGS_PATH/"$SCREEN_NAME"_system.err" - LINKS_FILE="$LOGS_PATH/"$SCREEN_NAME"_crash_links.link" - - $CURRENT_PATH/starter $SERVERBIN $GDB "$CONFIG" "$SYSLOG" "$SYSERR" $GDB_ENABLED -} - - -function restarter() { - local CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - cd $BINPATH - - mkdir -p "$LOGS_PATH" - - TRACE_BEGIN_STRING="SIGSEGV" - TRACE_FILE="$LOGS_PATH/"$SCREEN_NAME"_trace.log" - ERR_FILE="$LOGS_PATH/"$SCREEN_NAME"_error.log" - SYSLOG="$LOGS_PATH/"$SCREEN_NAME"_system.log" - SYSERR="$LOGS_PATH/"$SCREEN_NAME"_system.err" - LINKS_FILE="$LOGS_PATH/"$SCREEN_NAME"_crash_links.link" - - 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)" - echo $PID - if [ $GDB_ENABLED -eq 1 ]; then - echo "GDB enabled" - grep -B 10 -A 1800 "$TRACE_BEGIN_STRING" "$SYSLOG" >> "$TRACE_FILE" - cat "$SYSERR" > "$ERR_FILE" - screen -A -m -d -S $SCREEN_NAME "$CURRENT_PATH/starter" $SERVERBIN $GDB "$CONFIG" "$SYSLOG" "$SYSERR" 1 - fi - - if [ $GDB_ENABLED -eq 0 ]; then - echo "GDB disabled" - screen -A -m -d -S $SCREEN_NAME "$CURRENT_PATH/starter" $SERVERBIN null "$CONFIG" null null 0 - fi - fi - - sleep 15 - done -} diff --git a/modules/acore/startup-scritps/conf.sh.dist b/modules/acore/startup-scritps/conf.sh.dist new file mode 100644 index 000000000..fbf31e3ca --- /dev/null +++ b/modules/acore/startup-scritps/conf.sh.dist @@ -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 + + diff --git a/modules/acore/startup-scritps/examples/restarter-auth.sh b/modules/acore/startup-scritps/examples/restarter-auth.sh new file mode 100644 index 000000000..579c8c5b8 --- /dev/null +++ b/modules/acore/startup-scritps/examples/restarter-auth.sh @@ -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 + + diff --git a/modules/acore/startup-scritps/examples/restarter-world.sh b/modules/acore/startup-scritps/examples/restarter-world.sh new file mode 100644 index 000000000..036248a99 --- /dev/null +++ b/modules/acore/startup-scritps/examples/restarter-world.sh @@ -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 + + diff --git a/modules/acore/startup-scritps/examples/starter-auth.sh b/modules/acore/startup-scritps/examples/starter-auth.sh new file mode 100644 index 000000000..a6947a39f --- /dev/null +++ b/modules/acore/startup-scritps/examples/starter-auth.sh @@ -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 + + diff --git a/modules/acore/startup-scritps/examples/starter-world.sh b/modules/acore/startup-scritps/examples/starter-world.sh new file mode 100644 index 000000000..380a57c8e --- /dev/null +++ b/modules/acore/startup-scritps/examples/starter-world.sh @@ -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 + + diff --git a/modules/acore/startup-scritps/run-engine b/modules/acore/startup-scritps/run-engine new file mode 100644 index 000000000..7cecaeb13 --- /dev/null +++ b/modules/acore/startup-scritps/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 +} diff --git a/bin/runners/starter b/modules/acore/startup-scritps/starter similarity index 64% rename from bin/runners/starter rename to modules/acore/startup-scritps/starter index 1b87b5da6..2f98ea40f 100755 --- a/bin/runners/starter +++ b/modules/acore/startup-scritps/starter @@ -15,7 +15,13 @@ if [ $GBD_ENABLED -eq 1 ]; then [ ! -f "$SYSLOG" ] && touch "$SYSLOG" [ ! -f "$SYSERR" ] && touch "$SYSERR" - gdb -x $GDB_FILE --batch $1 >> "$SYSLOG" 2>> "$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