MC Server MGMT

MC SERVER INSTALLATION 

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt update
sudo apt install openjdk-17-jre-headless
sudo apt install screen
sudo ufw allow 25565

java -Xms1024M -Xmx1024M -jar <server.jar> nogui                // xms4G - specify starting ram (can use M for Mb and G for Gb); Xmx4G - maximum server ram
cd /home/mcadmin/server_1_21_4/
screen
java -Xms6G -Xmx6G -jar server_1_21_5.jar nogui                    // server start
ctrl+A then D                                                    // detach the window
screen -r                                                        // reattach the window
stop                                                            // stops MC server

nano eula.txt     -> eula=true
nano server.properties                                            // server settings (for cracked clients - online-mode=false)



using screen:
screen                                                            // starts a new session
screen -S <name>                                                // name a session

screen -r <name or id>                                            // reattach a screen
screen -ls                                                        // list screens
screen -X -S <name or id> quit                                    // quit a session
screen -wipe                                                    // kill all screens

ctrl+A then D                                                    // detach a screen but keep it running
ctrl+A then C                                                    // create window
ctrl+A then N                                                    // next window
ctrl+A then P                                                    // previous window
ctrl+A then K                                                    // kill window

pkill screen                                                    // kills all screens

SERVER MANAGEMENT
# help                        // v konzoli ukaže příkazy
# op <playername>            // admin



*************************************

wget https://piston-data.mojang.com/v1/objects/4707d00eb834b446575d89a61a11b5d548d8c001/server.jar

wget https://piston-data.mojang.com/v1/objects/e6ec2f64e6080b9b5d9b471b291c33cc7f509733/server.jar

-----------------------------

backup:

tar -czvf server_1_21_5_BACKUP.tar.gz server_1_21_5


-----------------------------
LOG + MAIL:

#!/bin/bash

# Path to your log file
LOG_FILE="/home/mcadmin/server_1_21_5/logs/latest.log"

# Your email settings
FROM="origin@server.com"
TO="destination@server.com"

# Monitor the file for changes
inotifywait -m -e modify "$LOG_FILE" | while read -r filename event; do
    # Read the last 1 line
    last_lines=$(tail -n 1 "$LOG_FILE")

    # Extract lines that contain an IP address
    ip_lines=$(echo "$last_lines" | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}')

    # If any lines with IPs were found, send an email
    if [[ -n "$ip_lines" ]]; then
        echo -e "From: $FROM\nTo: $TO\nSubject: Login Detected on MC Server\n\nLog Lines:\n$ip_lines" | msmtp -t
    fi
done

-----------------

nohup ./<script>.sh &
ps -aux | grep <script>
kill <pid>


/etc/systemd/system/mc-login-monitor.service


#!/bin/bash

logfile="/home/mcadmin/server_1_21_5/logs/latest.log"
log_monitor_output="/home/mcadmin/mc_login_notify_debug.log"

watch_log() {
    while true; do
        if [ -f "$logfile" ]; then
            echo "$(date): Watching $logfile" >> "$log_monitor_output"
            inotifywait -e modify "$logfile" |
            while read path _ file; do
                tail -n 1 "$logfile" | while read line; do
                    echo "$(date): Line: $line" >> "$log_monitor_output"
                    if echo "$line" | grep -q "logged in"; then
                        echo "$(date): Sending email for login line" >> "$log_monitor_output"
                        echo -e "$line" | mail -s "Login Detected on MC Server" destination.email@server.com
                    else
                        echo "$(date): Not a login line" >> "$log_monitor_output"
                    fi
                done
            done
        else
            echo "$(date): Log file not found" >> "$log_monitor_output"
        fi
        sleep 2
    done
}

watch_log