masa- icon

Minecraft server script - per-server part

masa- | PRO | 08/16/17 05:12:40 PM UTC | 0 ⭐ | 1312 👁️ | Never ⏰ | []
Bash |

5.85 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
# version x.x.x 2013-11-14 (YYYY-MM-DD)
 
#########################
#       Settings        #
#########################
INSTANCE='jomb'     # Server instance name (used in several places, such as the path, the server process (file)name, etc.)
WORLD_NAME='world'  # World directory name
HOST="localhost"    # Host address used for pinging the server
PORT="25565"        # Server port, used when running the check_ping command
 
ALLOW_UPDATES='false'           # Allow upgrading the server version using the mc_update() function?
ALLOW_DOWNGRADES='false'        # Allow downgrading the server version using the mc_update() function?
DISABLE_AUTOSAVE='false'        # Run the save-off command after start?
USE_TEMP_LOCATION='true'        # Copy the world to /tmp when starting, and back on stop
 
SCREEN_SESSION="mc_${INSTANCE}" # The screen session name that will be used for this server instance
BACKUP_PREFIX="${INSTANCE}"     # filename prefix (<prefix>_YYYY-mm-dd_HH.MM.SS.tar.gz)
BACKUP_SERVICE='false'          # backup the server file (jar)?
BACKUP_USING_TAR='false'        # Create a tarball of the server instance (or the world)?
BACKUP_USING_GIT='true'         # Create backups using git?
                                # NOTE: You have to run git init manually in the instance path (or the world path) before first backup
                                # NOTE 2: There must NOT be a world-only git repo under the world directory when doing
                                # full-server backups using git! Otherwise the world directory will not get backed up!
 
BACKUP_WORLD_ONLY='false'       # Back up only the world directory, not the full server instance?
 
#########################
#       Paths           #
#########################
BASE_PATH="/data/game_servers/minecraft"
INSTANCE_PATH="${BASE_PATH}/servers/${INSTANCE}"
 
WORLD_PATH_REAL="${INSTANCE_PATH}/${WORLD_NAME}"
WORLD_PATH_SYMLINK="${INSTANCE_PATH}/${WORLD_NAME}_symlink"
 
INSTANCE_PATH_TMP="/tmp/minecraft/${INSTANCE}"
WORLD_PATH_TMP="${INSTANCE_PATH_TMP}/${WORLD_NAME}"
 
SERVICE="minecraft_server_${INSTANCE}.jar"  # Server filename (symlink filename) in the INSTANCE directory
 
BACKUP_PATH="/mnt/640_jemma/mc_backups/${INSTANCE}"
STATE_FILE="/tmp/mc_server_${INSTANCE}_running.txt"
EVENT_LOG_FILE="${BASE_PATH}/event_logs/${INSTANCE}_events.log"
BACKUP_LOG_FILE="${BASE_PATH}/event_logs/${INSTANCE}_backups.log"
 
COMMON_FUNCTIONS_SCRIPT="${BASE_PATH}/scripts/mc_common_functions.sh"
PING_SCRIPT="${BASE_PATH}/scripts/ping.py"
PING_INVOCATION="python ${PING_SCRIPT} ${HOST} ${PORT} 1.6 2" # host, port, timeout, protocol [1|2|3]
 
# Update related things (mc_update()):
SERVER_FILES_PATH="/data/minecraft/server"  # Path where all the server jar files are saved (used when running mc_update())
SERVER_FILE_PREFIX="minecraft_server_"      # Filename prefix used for the server files in SERVER_FILES_PATH directory
VERSIONS_JSON="/tmp/minecraft_versions.json" # The path where the version json is saved, used for upgrades/downgrades
 
# Server process invocation and JVM arguments:
#OPTIONS='nogui --log-strip-color'  # Spigot/Bukkit
OPTIONS='nogui'
USERNAME='masa'
CPU_COUNT=2
 
#JVM_OPTS="-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=${CPU_COUNT} -XX:+AggressiveOpts"
JVM_OPTS="-XX:+UseConcMarkSweepGC"
JVM_MEM_OPTS="-Xms1024M -Xmx2048M"
INVOCATION="java ${JVM_MEM_OPTS} ${JVM_OPTS} -Dlog4j.configurationFile=log4j2.xml -jar ${SERVICE} ${OPTIONS}"
 
#########################
#       Delays          #
#########################
 
POST_START_DELAY=1      # Delay after the command, before entering the check loop
START_GRACE_DELAY=10    # How many times to loop/how long to wait for the server to come up
 
START_TO_DISABLE_AUTOSAVE_DELAY=5   # Delay after server start before issuing the save-off command (if DISABLE_AUTOSAVE='true')
 
POST_STOP_DELAY=1       # Delay after the command, before entering the check loop
STOP_GRACE_DELAY=10     # How many times to loop/how long to wait for the server to shut down
 
POST_SAVEALL_DELAY=3    # How long to wait after a save-all command before continuing
SAVEALL_BACKUP_INTERVAL=5   # How long to wait after doing a save-all, before starting the backup
 
RESTART_FIRST_WARNING=5 # Broadcast a warning message on the server and wait this long before restarting
RESTART_LAST_WARNING=2  # The second and last warning is broadcast this long before restarting
 
SAVEALL_STOP_INTERVAL=3 # How long to wait after the save-all command, before the stop command
 
POST_KILL_DELAY=5       # How long to wait after issuing the kill signal, before entering the check loop
KILL_GRACE_DELAY=10     # How many times to loop/how long to wait for the server to die, before throwing an error
 
PING_RETRY_DELAY=10     # How long to wait before ping commands
PING_RETRY_COUNT=3      # How many times to try the ping, before killing and restarting the server
KILL_TO_START_DELAY=10  # How long to wait after killing the server and before restarting it
 
#########################
#### End of settings ####
#########################
 
source ${COMMON_FUNCTIONS_SCRIPT}
 
 
# Process the commands
case "${1}" in
    start)
        mc_start
        ;;
    stop)
        mc_stop
        ;;
    restart)
        mc_restart ${2} ${3}
        ;;
    restartifup)
        mc_restart_if_up ${2} ${3}
        ;;
    check)
        mc_startifcrashed_basic
        ;;
    check_ping)
        mc_startifcrashed_ping
        ;;
    backup)
        mc_backup_wrapper
        ;;
    saveoff)
        mc_saveoff
        ;;
    saveon)
        mc_saveon
        ;;
    saveall)
        mc_saveall
        ;;
    kill)
        mc_kill
        ;;
    update)
        mc_update "${2}"
        ;;
    say)
        mc_say "${2}"
        ;;
    status)
        L_TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
        L_PREFIX="[${L_TIMESTAMP}]"
 
        if pgrep -u ${USERNAME} -f ${SERVICE} > /dev/null
        then
            echo "${L_PREFIX} [INFO] ${SERVICE} is running"
        else
            echo "${L_PREFIX} [INFO] ${SERVICE} is not running"
        fi
        ;;
    command)
        mc_command "${2}"
        ;;
 
    *)
        echo "Usage: /etc/init.d/minecraft {start|stop|restart|restartifup|check|check_ping|backup|saveoff|saveon|saveall|kill|update|say|status|command \"server command\"}"
        exit 1
        ;;
esac
 
exit 0

Comments