X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/4b06eb26103a8f0840915532fdf411ef82e9ad24..89cf694280e02442fb435d5fe516ac09783d776a:/bin/minecraft_init diff --git a/bin/minecraft_init b/bin/minecraft_init new file mode 100755 index 0000000..02a79e8 --- /dev/null +++ b/bin/minecraft_init @@ -0,0 +1,197 @@ +#!/bin/bash +# /etc/init.d/minecraft +# version 0.3.2 2011-01-27 (YYYY-MM-DD) + +### 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 server +# Description: Starts the minecraft server +### END INIT INFO + +#Settings +SERVICE='minecraft_server.jar' +USERNAME="minecraft" +MCPATH='/home/minecraft/minecraft' +CPU_COUNT=2 +INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar minecraft_server.jar nogui" +BACKUPPATH='/home/minecraft/minecraft/minecraft.backup' + +ME=`whoami` +as_user() { + if [ $ME == $USERNAME ] ; then + bash -c "$1" + else + su - $USERNAME -c "$1" + fi +} + +mc_start() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "Tried to start but $SERVICE was already running!" + else + echo "$SERVICE was not running... starting." + cd $MCPATH + as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION" + sleep 7 + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE is now running." + else + echo "Could not start $SERVICE." + fi + fi +} + +mc_saveoff() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE is running... suspending saves" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" + sync + sleep 10 + else + echo "$SERVICE was not running. Not suspending saves." + fi +} + +mc_saveon() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE is running... re-enabling saves" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'" + else + echo "$SERVICE was not running. Not resuming saves." + fi +} + +mc_stop() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE is running... stopping." + as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'" + as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" + sleep 10 + as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'" + sleep 7 + else + echo "$SERVICE was not running." + fi + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE could not be shut down... still running." + else + echo "$SERVICE is shut down." + fi +} + + +mc_update() { + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE is running! Will not start update." + else +# MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\ | cut -d \" -f 2` + MC_SERVER_URL="https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?" + as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL" + if [ -f $MCPATH/minecraft_server.jar.update ] + then + if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null` + then + echo "You are already running the latest version of $SERVICE." + else + as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar" + echo "Minecraft successfully updated." + fi + else + echo "Minecraft update could not be downloaded." + fi + fi +} + +mc_backup() { + echo "Backing up minecraft world" + if [ -d $BACKUPPATH/`date "+%Y.%m.%d"`_world ] + then + for i in 1 2 3 4 5 6 + do + if [ -d $BACKUPPATH/`date "+%Y.%m.%d"`-${i}_world ] + then + continue + else + as_user "cd $MCPATH && cp -r world $BACKUPPATH/`date "+%Y.%m.%d"`-${i}_world" + break + fi + done + else + as_user "cd $MCPATH && cp -r world $BACKUPPATH/`date "+%Y.%m.%d"`_world" + echo "Backed up world" + fi + echo "Backing up the minecraft server executable" + if [ -f "$BACKUPPATH/`date "+%Y.%m.%d"`_minecraft_server.jar" ] + then + for i in 1 2 3 4 5 6 + do + if [ -f "$BACKUPPATH/`date "+%Y.%m.%d"`-${i}_minecraft_server.jar" ] + then + continue + else + as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/`date "+%Y.%m.%d"`-${i}_minecraft_server.jar\"" + break + fi + done + else + as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/`date "+%Y.%m.%d"`_minecraft_server.jar\"" + fi + echo "Backup complete" +} + + +#Start-Stop here +case "$1" in + start) + mc_start + ;; + stop) + mc_stop + ;; + restart) + mc_stop + mc_start + ;; + update) + mc_stop + mc_backup + mc_update + mc_start + ;; + backup) + mc_saveoff + mc_backup + mc_saveon + ;; + status) + if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null + then + echo "$SERVICE is running." + else + echo "$SERVICE is not running." + fi + ;; + + *) + echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart}" + exit 1 + ;; +esac + +exit 0