mirror of
https://github.com/uprightbass360/AzerothCore-RealmMaster.git
synced 2026-01-13 00:58:34 +00:00
Add script to wait for client data and start world server
- Monitors client data download progress - Automatically starts world server when data is ready - Verifies all required data directories exist - Shows progress updates every 30 seconds - Includes comprehensive error handling and status reporting
This commit is contained in:
179
scripts/wait-and-start-worldserver.sh
Executable file
179
scripts/wait-and-start-worldserver.sh
Executable file
@@ -0,0 +1,179 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==============================================
|
||||
# Wait for Client Data and Start World Server
|
||||
# ==============================================
|
||||
# This script monitors the client data download and automatically starts
|
||||
# the world server once the data is ready
|
||||
# Usage: ./wait-and-start-worldserver.sh
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
local status=$1
|
||||
local message=$2
|
||||
case $status in
|
||||
"INFO")
|
||||
echo -e "${BLUE}ℹ️ ${message}${NC}"
|
||||
;;
|
||||
"SUCCESS")
|
||||
echo -e "${GREEN}✅ ${message}${NC}"
|
||||
;;
|
||||
"WARNING")
|
||||
echo -e "${YELLOW}⚠️ ${message}${NC}"
|
||||
;;
|
||||
"ERROR")
|
||||
echo -e "${RED}❌ ${message}${NC}"
|
||||
;;
|
||||
"HEADER")
|
||||
echo -e "\n${BLUE}=== ${message} ===${NC}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
print_status "HEADER" "WAITING FOR CLIENT DATA AND STARTING WORLD SERVER"
|
||||
|
||||
# Check if distrobox-host-exec is available
|
||||
if ! command -v distrobox-host-exec &> /dev/null; then
|
||||
print_status "ERROR" "distrobox-host-exec is not available"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if client-data container exists
|
||||
if ! distrobox-host-exec podman ps -a --format '{{.Names}}' 2>/dev/null | grep -q "^ac-client-data$"; then
|
||||
print_status "ERROR" "ac-client-data container not found"
|
||||
print_status "INFO" "Run the deployment script first: ./scripts/deploy-and-check-distrobox.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if client data is already complete
|
||||
print_status "INFO" "Checking client data status..."
|
||||
if distrobox-host-exec podman logs ac-client-data 2>&1 | grep -q "Game data setup complete"; then
|
||||
print_status "SUCCESS" "Client data already complete!"
|
||||
else
|
||||
# Monitor the download progress
|
||||
print_status "INFO" "Client data download in progress..."
|
||||
print_status "INFO" "Monitoring progress (Ctrl+C to stop monitoring, script will continue)..."
|
||||
|
||||
LAST_LINE=""
|
||||
CHECK_COUNT=0
|
||||
|
||||
while true; do
|
||||
# Check if container is still running or has completed
|
||||
CONTAINER_STATUS=$(distrobox-host-exec podman ps -a --format '{{.Names}} {{.Status}}' 2>/dev/null | grep "^ac-client-data" | awk '{print $2}')
|
||||
|
||||
if [[ "$CONTAINER_STATUS" == "Exited" ]]; then
|
||||
# Container finished, check if successful
|
||||
EXIT_CODE=$(distrobox-host-exec podman inspect ac-client-data --format='{{.State.ExitCode}}' 2>/dev/null)
|
||||
|
||||
if [ "$EXIT_CODE" = "0" ]; then
|
||||
print_status "SUCCESS" "Client data download and extraction completed!"
|
||||
break
|
||||
else
|
||||
print_status "ERROR" "Client data container failed with exit code $EXIT_CODE"
|
||||
print_status "INFO" "Check logs: distrobox-host-exec podman logs ac-client-data"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Show progress every 30 seconds
|
||||
if [ $((CHECK_COUNT % 6)) -eq 0 ]; then
|
||||
# Get latest progress line
|
||||
CURRENT_LINE=$(distrobox-host-exec podman logs --tail 5 ac-client-data 2>&1 | grep -E "(📊|📂|📁|✅|🎉)" | tail -1)
|
||||
|
||||
if [ "$CURRENT_LINE" != "$LAST_LINE" ] && [ -n "$CURRENT_LINE" ]; then
|
||||
echo "$CURRENT_LINE"
|
||||
LAST_LINE="$CURRENT_LINE"
|
||||
fi
|
||||
fi
|
||||
|
||||
((CHECK_COUNT++))
|
||||
sleep 5
|
||||
done
|
||||
fi
|
||||
|
||||
# Verify data directories exist
|
||||
print_status "INFO" "Verifying client data directories..."
|
||||
DATA_DIRS=("maps" "vmaps" "mmaps" "dbc")
|
||||
MISSING_DIRS=()
|
||||
|
||||
for dir in "${DATA_DIRS[@]}"; do
|
||||
if [ -d "storage/azerothcore/data/$dir" ] && [ -n "$(ls -A storage/azerothcore/data/$dir 2>/dev/null)" ]; then
|
||||
DIR_SIZE=$(du -sh storage/azerothcore/data/$dir 2>/dev/null | cut -f1)
|
||||
print_status "SUCCESS" "$dir directory exists ($DIR_SIZE)"
|
||||
else
|
||||
print_status "ERROR" "$dir directory missing or empty"
|
||||
MISSING_DIRS+=("$dir")
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#MISSING_DIRS[@]} -gt 0 ]; then
|
||||
print_status "ERROR" "Cannot start world server - missing data directories"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if world server is already running
|
||||
if distrobox-host-exec podman ps --format '{{.Names}}' 2>/dev/null | grep -q "^ac-worldserver$"; then
|
||||
print_status "WARNING" "World server is already running"
|
||||
print_status "INFO" "To restart: distrobox-host-exec podman restart ac-worldserver"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Remove any stopped world server container
|
||||
distrobox-host-exec podman rm -f ac-worldserver 2>/dev/null || true
|
||||
|
||||
# Start the world server
|
||||
print_status "INFO" "Starting World Server..."
|
||||
distrobox-host-exec bash -c "podman run -d --name ac-worldserver --network azerothcore --privileged -t \
|
||||
-p 8215:8085 -p 7778:7878 \
|
||||
-e AC_LOGIN_DATABASE_INFO='ac-mysql;3306;root;azerothcore123;acore_auth' \
|
||||
-e AC_WORLD_DATABASE_INFO='ac-mysql;3306;root;azerothcore123;acore_world' \
|
||||
-e AC_CHARACTER_DATABASE_INFO='ac-mysql;3306;root;azerothcore123;acore_characters' \
|
||||
-e AC_UPDATES_ENABLE_DATABASES=0 \
|
||||
-e AC_BIND_IP='0.0.0.0' \
|
||||
-e AC_DATA_DIR='/azerothcore/data' \
|
||||
-e AC_SOAP_PORT=7878 \
|
||||
-e AC_PROCESS_PRIORITY=0 \
|
||||
-e PLAYERBOT_ENABLED=1 \
|
||||
-e PLAYERBOT_MAX_BOTS=40 \
|
||||
-e AC_LOG_LEVEL=2 \
|
||||
-v ./storage/azerothcore/data:/azerothcore/data \
|
||||
-v ./storage/azerothcore/config:/azerothcore/env/dist/etc \
|
||||
-v ./storage/azerothcore/logs:/azerothcore/logs \
|
||||
-v ./storage/azerothcore/modules:/azerothcore/modules \
|
||||
-v ./storage/azerothcore/lua_scripts:/azerothcore/lua_scripts \
|
||||
--cap-add SYS_NICE \
|
||||
--restart unless-stopped \
|
||||
docker.io/acore/ac-wotlk-worldserver:14.0.0-dev" 2>&1 | grep -v "level=error.*graph driver"
|
||||
|
||||
print_status "INFO" "Waiting for world server to start..."
|
||||
sleep 10
|
||||
|
||||
# Check if world server is running
|
||||
if distrobox-host-exec podman ps --format '{{.Names}}' 2>/dev/null | grep -q "^ac-worldserver$"; then
|
||||
print_status "SUCCESS" "World server started successfully!"
|
||||
|
||||
# Show initial logs
|
||||
print_status "INFO" "Initial world server logs:"
|
||||
distrobox-host-exec podman logs --tail 15 ac-worldserver 2>&1 | grep -v "level=error.*graph driver" || true
|
||||
|
||||
print_status "HEADER" "WORLD SERVER STATUS"
|
||||
print_status "SUCCESS" "🎮 World Server: Running on port 8215"
|
||||
print_status "SUCCESS" "🔧 SOAP API: Available on port 7778"
|
||||
print_status "INFO" "Monitor logs: distrobox-host-exec podman logs -f ac-worldserver"
|
||||
print_status "INFO" "Connect with WoW client: Set realmlist to 127.0.0.1:8215"
|
||||
else
|
||||
print_status "ERROR" "World server failed to start"
|
||||
print_status "INFO" "Check logs: distrobox-host-exec podman logs ac-worldserver"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_status "SUCCESS" "🎉 AzerothCore is now fully operational!"
|
||||
Reference in New Issue
Block a user