summaryrefslogtreecommitdiff
path: root/apps/startup-scripts/src/simple-restarter
diff options
context:
space:
mode:
Diffstat (limited to 'apps/startup-scripts/src/simple-restarter')
-rwxr-xr-xapps/startup-scripts/src/simple-restarter89
1 files changed, 89 insertions, 0 deletions
diff --git a/apps/startup-scripts/src/simple-restarter b/apps/startup-scripts/src/simple-restarter
new file mode 100755
index 0000000000..c5540e4ab9
--- /dev/null
+++ b/apps/startup-scripts/src/simple-restarter
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+
+# AzerothCore Simple Restarter
+# This script is a wrapper around the starter script that provides restart functionality
+# and maintains compatibility with the acore dashboard
+#
+# Usage: simple-restarter <binary> [gdb_file] [config] [syslog] [syserr] [gdb_enabled] [crashes_path]
+#
+# Parameters (same as starter):
+# $1 - Binary to execute (required)
+# $2 - GDB configuration file (optional)
+# $3 - Configuration file path (optional)
+# $4 - System log file (optional)
+# $5 - System error file (optional)
+# $6 - GDB enabled flag (0/1, optional)
+# $7 - Crashes directory path (optional)
+
+# Get script directory
+CURRENT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+
+# Parameters (same as starter)
+BINPATH="$1"
+BINFILE="$2"
+GDB_FILE="$3"
+CONFIG="$4"
+SYSLOG="$5"
+SYSERR="$6"
+GDB_ENABLED="${7:-0}"
+CRASHES_PATH="$8"
+
+BINARY="$BINPATH/$BINFILE"
+
+# Default values (same as starter)
+DEFAULT_CRASHES_PATH="./crashes"
+DEFAULT_GDB_FILE="$CURRENT_PATH/gdb.conf"
+
+# Set defaults if not provided
+CRASHES_PATH="${CRASHES_PATH:-$DEFAULT_CRASHES_PATH}"
+GDB_FILE="${GDB_FILE:-$DEFAULT_GDB_FILE}"
+
+# Counters for crash detection
+_instant_crash_count=0
+_restart_count=0
+
+# Check if starter script exists
+STARTER_SCRIPT="$CURRENT_PATH/starter"
+if [ ! -f "$STARTER_SCRIPT" ]; then
+ echo "Error: starter script not found at $STARTER_SCRIPT"
+ exit 1
+fi
+
+# Main restart loop
+while true; do
+ STARTING_TIME=$(date +%s)
+
+ # Use starter script to launch the binary with all parameters
+ "$STARTER_SCRIPT" "$BINPATH" "$BINFILE" "$GDB_FILE" "$CONFIG" "$SYSLOG" "$SYSERR" "$GDB_ENABLED" "$CRASHES_PATH"
+
+ _exit_code=$?
+
+ echo "$(basename "$BINARY") terminated with exit code: $_exit_code"
+
+ # Calculate runtime
+ ENDING_TIME=$(date +%s)
+ DIFFERENCE=$((ENDING_TIME - STARTING_TIME))
+
+ ((_restart_count++))
+ echo "$(basename "$BINARY") terminated after $DIFFERENCE seconds, restart count: $_restart_count"
+
+ # Crash loop detection
+ if [ $DIFFERENCE -lt 10 ]; then
+ # Increment instant crash count if runtime is lower than 10 seconds
+ ((_instant_crash_count++))
+ echo "Warning: Quick restart detected ($DIFFERENCE seconds) - instant crash count: $_instant_crash_count"
+ else
+ # Reset count on successful longer run
+ _instant_crash_count=0
+ fi
+
+ # Prevent infinite crash loops
+ if [ $_instant_crash_count -gt 5 ]; then
+ echo "Error: $(basename "$BINARY") restarter exited. Infinite crash loop prevented (6 crashes in under 10 seconds each)"
+ echo "Please check your system configuration and logs"
+ exit 1
+ fi
+
+ echo "$(basename "$BINARY") will restart in 3 seconds..."
+ sleep 3
+done