116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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 finish {
 | 
						|
    if [ ! -z "$SCREEN_NAME" ]; then
 | 
						|
        screen -X -S "$SCREEN_NAME" quit
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# disabled for now, but could be useful if we want 
 | 
						|
# shutdown the process if restarter crashes for some reason
 | 
						|
# trap finish EXIT
 | 
						|
 | 
						|
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 1 && ! -z $gdbres ]]; then
 | 
						|
        return 1
 | 
						|
    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 1
 | 
						|
    fi
 | 
						|
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
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 "$BINPATH/crashes"
 | 
						|
    else
 | 
						|
        $RUN_ENGINE_PATH/starter $2 $3 "$4" "$5" "$6" $7 "$BINPATH/crashes"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
function starter() {
 | 
						|
    cd $BINPATH
 | 
						|
 | 
						|
    mkdir -p "$LOGS_PATH"
 | 
						|
    mkdir -p "$BINPATH"/crashes
 | 
						|
 | 
						|
    configureFiles
 | 
						|
 | 
						|
    run "$SCREEN_NAME" "$SERVERBIN" "$GDB" "$CONFIG" "$SYSLOG" "$SYSERR" "$GDB_ENABLED"
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function restarter() {
 | 
						|
    cd $BINPATH
 | 
						|
 | 
						|
    mkdir -p "$LOGS_PATH"
 | 
						|
    mkdir -p "$BINPATH"/crashes
 | 
						|
 | 
						|
    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
 | 
						|
}
 | 
						|
 |