251 lines
5.5 KiB
Bash
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 $? |