Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # version x.x.x 2018-10-13 (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?
- 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_USING_RESTIC='false' # Make a backup using the restic backup program
- export RESTIC_PASSWORD=123
- 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_data/mc_backups/${INSTANCE}"
- BACKUP_PATH_TAR=${BACKUP_PATH}
- BACKUP_RESTIC_REPO="/mnt/640_data/mc_backups/${INSTANCE}.restic"
- 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"
- # cpw's options from https://old.reddit.com/r/feedthebeast/comments/5jhuk9/modded_mc_and_memory_usage_a_history_with_a/
- #JVM_OPTS="-XX:+UseG1GC -Dsun.rmi.dgc.server.gcInterval=2147483646 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M"
- JVM_OPTS="-XX:+UseConcMarkSweepGC"
- JVM_MEM_OPTS="-Xms1G -Xmx2G"
- 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=-1 # Delay after server start before issuing the save-off command. Use -1 to not disable auto-saves.
- 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=-1 # 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=-1 # 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
- ;;
- backups_list)
- mc_backups_list
- ;;
- saveoff)
- mc_saveoff
- ;;
- saveon)
- mc_saveon
- ;;
- saveall)
- mc_saveall
- ;;
- sync)
- mc_sync
- ;;
- 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|backups_list|saveoff|saveon|saveall|kill|update|say|status|command \"server command\"}"
- exit 1
- ;;
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement