#!/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 $?