Last active
August 29, 2015 14:04
-
-
Save keyz182/cafad1f6d293f52eca44 to your computer and use it in GitHub Desktop.
Minecraft init script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
### BEGIN INIT INFO | |
# Provides: minecraft | |
# Required-Start: $local_fs $remote_fs | |
# Required-Stop: $local_fs $remote_fs | |
# Should-Start: $network | |
# Should-Stop: $network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Minecraft init script | |
# Description: This is a start up script for minecraft_server.jar server. | |
### END INIT INFO | |
### LSBise: http://wiki.debian.org/LSBInitScripts | |
### ADD ERROR HANDLING ### | |
### USE /lib/lsb/init-functions TO DISPLAY "Starting Minecraft server... [fail]" MESSAGE WHEN start_minecraft() FAILS (e.g., minecraft is already running, thus logically the start_minecraft() should fail) | |
### MAKE SURE TO REDIRECT ERRORS TO STDERR | |
### CREATE A COLORIZE FUNCTION WITH THE FOLLOWING USAGE: colorize_heredoc_text("string of $TEXT") --color red | |
PATH=/sbin:/bin:/usr/bin/:/usr/local/bin | |
# Please set the following variables and test this script before you install it. | |
MINECRAFT_USER=minecraft | |
MINE_PATH=/home/minecraft/DbyZ | |
MINE_BACKUP_PATH=/home/minecraft/DbyZ-Incremental | |
. /lib/lsb/init-functions | |
ME=`whoami` | |
TERM_MULTIPLEXER=tmux | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
SESSION_INFO_CMD=`sudo -u $MINECRAFT_USER tmux list-sessions 2>&1` | |
else | |
SESSION_INFO_CMD=`tmux list-sessions 2>&1` | |
fi | |
GET_SESSION="tmux list-sessions" | |
CONNECT_CMD="tmux a -t ${SESSION_INFO_CMD::1}" | |
START_SESSION_CMD="tmux new -d -s minecraft" | |
#START_MINECRAFT_CMD="java -server -XX:+UseConcMarkSweepGC -Xms4096m -Xmx8192m -Xmn768m -jar forge-1.6.4-965.jar nogui" | |
START_MINECRAFT_CMD="java -server -XX:+UseLargePages -XX:+UseConcMarkSweepGC -Xms4096m -Xmx7002m -Xmn768m -jar forge-1.6.4-965.jar nogui" | |
SENDKEYS_CMD="tmux send-keys -t minecraft `printf 'stop\r'`" | |
SEND_CMD="tmux send-keys -t minecraft" | |
SENDKEYS_CMD_SAVE_OFF="tmux send-keys -t minecraft `printf 'save-off\r'`" | |
SENDKEYS_CMD_SAVE_ALL="tmux send-keys -t minecraft `printf 'save-all\r'`" | |
SENDKEYS_CMD_SAVE_ON="tmux send-keys -t minecraft `printf 'save-on\r'`" | |
DETACH_KEYS="Ctrl-b d" | |
start_minecraft() | |
{ | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
cd $MINE_PATH && sudo -u $MINECRAFT_USER $START_SESSION_CMD "$START_MINECRAFT_CMD" | |
else | |
cd $MINE_PATH && $START_SESSION_CMD "$START_MINECRAFT_CMD" | |
fi | |
} | |
stop_minecraft() | |
{ | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
sudo -u $MINECRAFT_USER $SENDKEYS_CMD | |
else | |
$SENDKEYS_CMD | |
fi | |
} | |
status_minecraft() | |
{ | |
############### | |
ps auxww | grep -iEq "tmux.*[m]inecraft" | |
EXITVAL=$? | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
SESSION_INFO=`sudo -u $MINECRAFT_USER $GET_SESSION 2>&1` | |
else | |
SESSION_INFO=`$GET_SESSION 2>&1` | |
fi | |
return $EXITVAL | |
} | |
save_off() | |
{ | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Starting Backup - World going Read-Only!' C-m | |
sudo -u $MINECRAFT_USER $SENDKEYS_CMD_SAVE_OFF | |
sudo -u $MINECRAFT_USER $SENDKEYS_CMD_SAVE_ALL | |
else | |
$SEND_CMD 'say Starting Backup - World going Read-Only!' C-m | |
$SENDKEYS_CMD_SAVE_OFF | |
$SENDKEYS_CMD_SAVE_ALL | |
fi | |
} | |
save_on() | |
{ | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
sudo -u $MINECRAFT_USER $SENDKEYS_CMD_SAVE_ON | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Backup Complete!' C-m | |
else | |
$SENDKEYS_CMD_SAVE_ON | |
$SEND_CMD 'say Backup Complete!' C-m | |
fi | |
} | |
full_backup(){ | |
save_off | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
sudo -u $MINECRAFT_USER tar czf $MINE_BACKUP_PATH/fullbackup.tar.gz $MINE_PATH > /dev/null 2>&1 | |
else | |
tar czf $MINE_BACKUP_PATH/fullbackup.tar.gz $MINE_PATH > /dev/null 2>&1 | |
fi | |
save_off | |
} | |
rdiff_backup(){ | |
DATE=$(date +%Y-%m-%d-%H) | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
sudo -u $MINECRAFT_USER cp $MINE_PATH/server.log $MINE_PATH/logs/server-$DATE.log | |
sleep 1 | |
cat /dev/null | sudo -u $MINECRAFT_USER tee $MINE_PATH/server.log | |
save_off | |
sudo -u $MINECRAFT_USER nice -n 10 rdiff-backup --print-statistics $MINE_PATH $MINE_BACKUP_PATH/backups > $MINE_BACKUP_PATH/logs/$DATE-$server-backup.log | |
sudo -u $MINECRAFT_USER rdiff-backup --force --remove-older-than 48B $MINE_BACKUP_PATH/backups | |
save_on | |
else | |
cp $MINE_PATH/server.log $MINE_PATH/logs/server-$DATE.log | |
sleep 1 | |
cat /dev/null > $MINE_PATH/server.log | |
save_off | |
nice -n 10 rdiff-backup --print-statistics $MINE_PATH $MINE_BACKUP_PATH/backups > $MINE_BACKUP_PATH/logs/$DATE-$server-backup.log | |
rdiff-backup --force --remove-older-than 48B $MINE_BACKUP_PATH/backups | |
save_on | |
fi | |
} | |
backup_list(){ | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
sudo -u $MINECRAFT_USER rdiff-backup -l $MINE_BACKUP_PATH/backups | |
sudo -u $MINECRAFT_USER rdiff-backup --list-increment-sizes $MINE_BACKUP_PATH/backups | |
else | |
rdiff-backup -l $MINE_BACKUP_PATH/backups | |
rdiff-backup --list-increment-sizes $MINE_BACKUP_PATH/backups | |
fi | |
} | |
case "$1" in | |
start) | |
log_begin_msg "Starting Minecraft server..." | |
status_minecraft && echo -n "ERROR: Minecraft already appears to be running." || start_minecraft | |
log_end_msg 0 | |
;; | |
stop) | |
log_begin_msg "Stopping Minecraft server..." | |
stop_minecraft | |
log_end_msg 0 | |
;; | |
status) | |
status_minecraft | |
if [ -e $MINE_PATH/ForgeModLoader-server-0.log.lck ] && [ "$EXITVAL" -eq "0" ]; then | |
if [ "$ME" != "$MINECRAFT_USER" ] | |
then | |
cat <<- -EOF- | |
Minecraft appears to be running... | |
`echo -e "\033[22;32m"`*`tput sgr0`$TERM_MULTIPLEXER session info: `echo -e "\033[22;32m"`$SESSION_INFO`tput sgr0` | |
`echo -e "\033[22;32m"`*`tput sgr0`To connect to the $TERM_MULTIPLEXER(1) session and administrate the minecraft server, do the following: `echo -e "\033[22;33m"`sudo -u $MINECRAFT_USER $CONNECT_CMD`tput sgr0` | |
`echo -e "\033[22;32m"`*`tput sgr0`When finished, detach from the session with the following keystrokes: `echo -e "\033[22;34m"`$DETACH_KEYS`tput sgr0`. | |
-EOF- | |
exit 0 | |
else | |
cat <<- -EOF- | |
Minecraft appears to be running... | |
`echo -e "\033[22;32m"`*`tput sgr0`$TERM_MULTIPLEXER session info: `echo -e "\033[22;32m"`$SESSION_INFO`tput sgr0` | |
`echo -e "\033[22;32m"`*`tput sgr0`To connect to the $TERM_MULTIPLEXER(1) session and administrate the minecraft server, do the following: `echo -e "\033[22;33m"`$CONNECT_CMD`tput sgr0` | |
`echo -e "\033[22;32m"`*`tput sgr0`When finished, detach from the session with the following keystrokes: `echo -e "\033[22;34m"`$DETACH_KEYS`tput sgr0`. | |
-EOF- | |
exit 0 | |
fi | |
else | |
cat <<- -EOF- | |
Minecraft does not appear to be running... | |
`echo -e "\033[22;31m"`*`tput sgr0`$TERM_MULTIPLEXER session information: `echo -e "\033[22;31m"`$SESSION_INFO`tput sgr0` | |
-EOF- | |
exit 1 | |
fi | |
;; | |
restart) | |
log_begin_msg "Restarting Minecraft server..." | |
stop_minecraft | |
sleep 2 | |
start_minecraft | |
log_end_msg 0 | |
;; | |
timed-restart) | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 5 minutes' C-m | |
sleep 1m | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 4 minutes' C-m | |
sleep 1m | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 3 minutes' C-m | |
sleep 1m | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 2 minutes' C-m | |
sleep 1m | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 1 minutes' C-m | |
sleep 30s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 30 seconds' C-m | |
sleep 20s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 10 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 9 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 8 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 7 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 6 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 5 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 4 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 3 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 2 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server in 1 seconds' C-m | |
sleep 1s | |
sudo -u $MINECRAFT_USER $SEND_CMD 'say Restarting Minecraft server...' C-m | |
stop_minecraft | |
sleep 10s | |
start_minecraft | |
log_end_msg 0 | |
;; | |
save-off) | |
log_begin_msg "Disabling save on MC Server..." | |
save_off | |
log_end_msg 0 | |
;; | |
save-on) | |
log_begin_msg "Enabling save on MC Server..." | |
save_on | |
log_end_msg 0 | |
;; | |
backup) | |
log_begin_msg "Backing up..." | |
rdiff_backup | |
log_end_msg 0 | |
;; | |
full-backup) | |
log_begin_msg "Backing up..." | |
full_backup | |
log_end_msg 0 | |
;; | |
list-backup) | |
log_begin_msg "Listing Backups..." | |
backup_list "${2}" | |
log_end_msg 0 | |
;; | |
*) | |
echo "Usage: $0 start|stop|status|restart|timed-restart|save-off|save-on|backup|list-backup|full-backup" >&2 | |
exit 3 | |
;; | |
esac | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Note that this requires hugepages to be enabled on the server to work. Swap the two "START_MINECRAFT_CMD" if you hugepages isn't enabled.