knightonline/server/LogInServer/loginserver.sh

251 lines
5.5 KiB
Bash

#!/bin/bash
# Knight Online Login Server Linux Startup Script
# Author: Levent Ferrah
# Description: Startup script for Knight Online Login Server on Linux
# Set script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Configuration
SERVER_NAME="LoginServer"
BINARY_PATH="./bin/LoginServer"
LOG_DIR="./Logs"
PID_FILE="./loginserver.pid"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Functions
log_message() {
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}
log_error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1"
}
log_success() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS:${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARNING:${NC} $1"
}
# Check if server is running
is_running() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p $PID > /dev/null 2>&1; then
return 0
else
rm -f "$PID_FILE"
return 1
fi
fi
return 1
}
# Start server
start_server() {
log_message "Starting Knight Online Login Server..."
if is_running; then
log_warning "Login Server is already running (PID: $(cat $PID_FILE))"
return 1
fi
# Check if binary exists
if [ ! -f "$BINARY_PATH" ]; then
log_error "Binary not found: $BINARY_PATH"
log_message "Please compile the server first using: ./build.sh"
return 1
fi
# Create log directory
mkdir -p "$LOG_DIR"
# Check configuration file
if [ ! -f "./LogIn.ini" ]; then
log_warning "Configuration file LogIn.ini not found!"
log_message "Creating default configuration..."
create_default_config
fi
# Start server in background
nohup "$BINARY_PATH" > "$LOG_DIR/server_output.log" 2>&1 &
SERVER_PID=$!
# Save PID
echo $SERVER_PID > "$PID_FILE"
# Wait a moment and check if it started successfully
sleep 2
if is_running; then
log_success "Login Server started successfully (PID: $SERVER_PID)"
log_message "Server output: $LOG_DIR/server_output.log"
return 0
else
log_error "Failed to start Login Server"
return 1
fi
}
# Stop server
stop_server() {
log_message "Stopping Knight Online Login Server..."
if ! is_running; then
log_warning "Login Server is not running"
return 1
fi
PID=$(cat "$PID_FILE")
log_message "Sending SIGTERM to process $PID..."
kill -TERM $PID
# Wait for graceful shutdown
for i in {1..10}; do
if ! is_running; then
log_success "Login Server stopped successfully"
rm -f "$PID_FILE"
return 0
fi
sleep 1
done
# Force kill if necessary
log_warning "Graceful shutdown failed, forcing kill..."
kill -KILL $PID 2>/dev/null
rm -f "$PID_FILE"
log_success "Login Server forcefully stopped"
}
# Restart server
restart_server() {
log_message "Restarting Knight Online Login Server..."
stop_server
sleep 2
start_server
}
# Show server status
status_server() {
if is_running; then
PID=$(cat "$PID_FILE")
log_success "Login Server is running (PID: $PID)"
# Show some process info
echo ""
echo "Process Information:"
ps -p $PID -o pid,ppid,cmd,start,etime
# Show listening ports
echo ""
echo "Listening Ports:"
ss -tlnp | grep $PID 2>/dev/null || echo "No listening ports found"
else
log_error "Login Server is not running"
fi
}
# View logs
view_logs() {
if [ -f "$LOG_DIR/server_output.log" ]; then
tail -f "$LOG_DIR/server_output.log"
else
log_error "Log file not found: $LOG_DIR/server_output.log"
fi
}
# Create default configuration
create_default_config() {
cat > LogIn.ini << EOF
[DOWNLOAD]
URL=ftp.yoursite.net
PATH=/
[ODBC]
DSN=KO_MAIN
UID=username
PWD=password
[SETTINGS]
PORT=15100
[SERVER_LIST]
COUNT=1
SERVER_00=127.0.0.1
LANIP_00=127.0.0.1
NAME_00=Test Server
ID_00=1
GROUPID_00=1
PREMLIMIT_00=1000
FREELIMIT_00=1000
KING1_00=
KING2_00=
KINGMSG1_00=
KINGMSG2_00=
[NEWS]
TITLE_00=Welcome to Knight Online
MESSAGE_00=Welcome to our Knight Online server!
TITLE_01=
MESSAGE_01=
TITLE_02=
MESSAGE_02=
EOF
log_success "Default configuration created: LogIn.ini"
}
# Main script
case "$1" in
start)
start_server
;;
stop)
stop_server
;;
restart)
restart_server
;;
status)
status_server
;;
logs)
view_logs
;;
config)
create_default_config
;;
*)
echo "Knight Online Login Server Management Script"
echo ""
echo "Usage: $0 {start|stop|restart|status|logs|config}"
echo ""
echo "Commands:"
echo " start - Start the login server"
echo " stop - Stop the login server"
echo " restart - Restart the login server"
echo " status - Show server status"
echo " logs - View server logs (real-time)"
echo " config - Create default configuration file"
echo ""
echo "Examples:"
echo " $0 start # Start the server"
echo " $0 status # Check if server is running"
echo " $0 logs # Watch server logs"
echo ""
exit 1
;;
esac
exit $?