Advertisement
ellisgeek

Minecraft server startup init.d script with workaround

May 10th, 2011
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.97 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 0.3.2 2011-01-27 (YYYY-MM-DD)
  4.  
  5. ### BEGIN INIT INFO
  6. # Provides:   minecraft
  7. # Required-Start: $local_fs $remote_fs
  8. # Required-Stop:  $local_fs $remote_fs
  9. # Should-Start:   $network
  10. # Should-Stop:    $network
  11. # Default-Start:  2 3 4 5
  12. # Default-Stop:   0 1 6
  13. # Short-Description:    Minecraft server
  14. # Description:    Starts the minecraft server
  15. ### END INIT INFO
  16.  
  17. #Settings
  18. SERVICE='minecraft_server.jar'
  19. USERNAME="minecraft"
  20. MCPATH='/var/minecraft'
  21. CPU_COUNT=1
  22. INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar minecraft_server.jar nogui"
  23. BACKUPPATH='/data/backups/minecraft/minecraft.backup'
  24.  
  25. ME=`whoami`
  26. as_user() {
  27.   if [ $ME == $USERNAME ] ; then
  28.     bash -c "$1"
  29.   else
  30.     su - $USERNAME -c "$1"
  31.   fi
  32. }
  33.  
  34. mc_start() {
  35.   if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  36.   then
  37.     echo "Tried to start but $SERVICE was already running!"
  38.   else
  39.     echo "$SERVICE was not running... starting."
  40.     cd $MCPATH
  41.     as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
  42.     sleep 7
  43.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  44.     then
  45.       echo "$SERVICE is now running."
  46.     else
  47.       echo "Could not start $SERVICE."
  48.     fi
  49.   fi
  50. }
  51.  
  52. mc_saveoff() {
  53.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  54.         then
  55.                 echo "$SERVICE is running... suspending saves"
  56.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly... Expect to be disconnected...\"\015'"
  57.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  58.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  59.                 sync
  60.                 sleep 10
  61.         else
  62.                 echo "$SERVICE was not running. Not suspending saves."
  63.         fi
  64. }
  65.  
  66. mc_saveon() {
  67.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  68.         then
  69.                 echo "$SERVICE is running... re-enabling saves"
  70.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  71.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  72.         else
  73.                 echo "$SERVICE was not running. Not resuming saves."
  74.         fi
  75. }
  76.  
  77. mc_stop() {
  78.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  79.         then
  80.                 echo "$SERVICE is running... stopping."
  81.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  82.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  83.                 sleep 10
  84.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
  85.                 sleep 7
  86.         else
  87.                 echo "$SERVICE was not running."
  88.         fi
  89.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  90.         then
  91.                 echo "$SERVICE could not be shut down... still running."
  92.         else
  93.                 echo "$SERVICE is shut down."
  94.         fi
  95. }
  96.  
  97.  
  98. mc_update() {
  99.   if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  100.   then
  101.     echo "$SERVICE is running! Will not start update."
  102.   else
  103.     MC_SERVER_URL=http://www.minecraft.net/download/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
  104.     as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
  105.     if [ -f $MCPATH/minecraft_server.jar.update ]
  106.     then
  107.       if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
  108.         then
  109.           echo "You are already running the latest version of $SERVICE."
  110.         else
  111.           as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
  112.           echo "Minecraft successfully updated."
  113.       fi
  114.     else
  115.       echo "Minecraft update could not be downloaded."
  116.     fi
  117.   fi
  118. }
  119.  
  120. mc_backup() {
  121.    echo "Backing up minecraft world"
  122.    if [ -d $BACKUPPATH/world_`date "+%Y.%m.%d"` ]
  123.    then
  124.      for i in 1 2 3 4 5 6
  125.      do
  126.        if [ -d $BACKUPPATH/world_`date "+%Y.%m.%d"`-$i ]
  127.        then
  128.          continue
  129.        else
  130.          as_user "cd $MCPATH && cp -r world $BACKUPPATH/world_`date "+%Y.%m.%d"`-$i"
  131.          break
  132.        fi
  133.      done
  134.    else
  135.      as_user "cd $MCPATH && cp -r world $BACKUPPATH/world_`date "+%Y.%m.%d"`"
  136.      echo "Backed up world"
  137.    fi
  138.    echo "Backing up the minecraft server executable"
  139.    if [ -f "$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d"`.jar" ]
  140.    then
  141.      for i in 1 2 3 4 5 6
  142.      do
  143.        if [ -f "$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d"`-$i.jar" ]
  144.        then
  145.          continue
  146.        else
  147.          as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d"`-$i.jar\""
  148.          break
  149.        fi
  150.      done
  151.    else
  152.      as_user "cd $MCPATH && cp minecraft_server.jar \"$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d"`.jar\""
  153.    fi
  154.    echo "Backup complete"
  155. }
  156.  
  157.  
  158. #Start-Stop here
  159. case "$1" in
  160.   start)
  161.     mc_start
  162.     ;;
  163.   stop)
  164.     mc_stop
  165.     ;;
  166.   restart)
  167.     mc_stop
  168.     mc_start
  169.     ;;
  170.   update)
  171.     mc_stop
  172.     mc_backup
  173.     mc_update
  174.     mc_start
  175.     ;;
  176.   backup)
  177.     mc_saveoff
  178.     mc_backup
  179.     mc_saveon
  180.     mc_start
  181.     ;;
  182.   status)
  183.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  184.     then
  185.       echo "$SERVICE is running."
  186.     else
  187.       echo "$SERVICE is not running."
  188.     fi
  189.     ;;
  190.  
  191.   *)
  192.   echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart}"
  193.   exit 1
  194.   ;;
  195. esac
  196.  
  197. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement