]> git.rmz.io Git - dotfiles.git/blobdiff - bin/minecraft_init
add tardis bin
[dotfiles.git] / bin / minecraft_init
diff --git a/bin/minecraft_init b/bin/minecraft_init
new file mode 100755 (executable)
index 0000000..02a79e8
--- /dev/null
@@ -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\</a\> | 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