Guest User

Untitled

a guest
Feb 11th, 2013
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.79 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 0.5 2011-09-24 (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='craftbukkit.jar'
  19. USERNAME="username"
  20. MCSTORE='/home/username/minecraft/server/survival/'
  21. MCPATH='/home/username/minecraft_ramdisk'
  22. CPU_COUNT=2
  23. INVOCATION="java -d64 -Xmx2048M -Xms2048M -server -jar $SERVICE nogui"
  24. BACKUPPATH='/home/username/backups/minecraft_backups/'
  25.  
  26.  
  27. ME=`whoami`
  28. as_user() {
  29.   if [ "$ME" == "$USERNAME" ] ; then
  30.     bash -c "$1"
  31.   else
  32.     su - $USERNAME -c "$1"
  33.   fi
  34. }
  35.  
  36. mc_start() {
  37.   if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  38.   then
  39.     echo "Tried to start but $SERVICE was already running!"
  40.   else
  41.     echo "$SERVICE was not running... starting."
  42.     cd $MCPATH
  43.     if [ ! -f "$MCPATH/craftbukkit.jar" ]
  44.     then
  45.       echo "Ram drive empty...  prepping."
  46.       as_user "cp -R $MCSTORE/* $MCPATH/"
  47.     fi
  48.     as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
  49.     sleep 7
  50.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  51.     then
  52.       echo "$SERVICE is now running."
  53.     else
  54.       echo "Could not start $SERVICE."
  55.     fi
  56.   fi
  57. }
  58.  
  59. mc_saveoff() {
  60.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  61.         then
  62.                 echo "$SERVICE is running... suspending saves"
  63.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  64.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  65.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  66.                 sync
  67.                 sleep 10
  68.         else
  69.                 echo "$SERVICE was not running. Not suspending saves."
  70.         fi
  71. }
  72.  
  73. mc_saveon() {
  74.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  75.         then
  76.                 echo "$SERVICE is running... re-enabling saves"
  77.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  78.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  79.         else
  80.                 echo "$SERVICE was not running. Not resuming saves."
  81.         fi
  82. }
  83.  
  84. mc_stop() {
  85.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  86.         then
  87.                 echo "$SERVICE is running... stopping."
  88.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 5 SECONDS. Saving map...\"\015'"
  89.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  90.                 sleep 5
  91.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
  92.                 sleep 5
  93.         else
  94.                 echo "$SERVICE was not running."
  95.         fi
  96.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  97.         then
  98.                 echo "$SERVICE could not be shut down... still running."
  99.         else
  100.                 echo "$SERVICE is shut down."
  101.         fi
  102. }
  103.  
  104.  
  105. mc_update() {
  106.   if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  107.   then
  108.     echo "$SERVICE is running! Will not start update."
  109.   else
  110.     MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\</a\> | cut -d \" -f 2`
  111.     as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
  112.     if [ -f $MCPATH/minecraft_server.jar.update ]
  113.     then
  114.       if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
  115.         then
  116.           echo "You are already running the latest version of $SERVICE."
  117.         else
  118.           as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
  119.           echo "Minecraft successfully updated."
  120.       fi
  121.     else
  122.       echo "Minecraft update could not be downloaded."
  123.     fi
  124.   fi
  125. }
  126.  
  127. mc_backup() {
  128.    echo "Backing up minecraft files"
  129.    if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
  130.    then
  131.      for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
  132.      do
  133.        if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
  134.        then
  135.          continue
  136.        else
  137.          as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ."
  138.          break
  139.        fi
  140.      done
  141.    else
  142.      as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ."
  143.    fi
  144.    echo "Backup complete"
  145. }
  146.  
  147. mc_disksaverun() {
  148.  
  149.   if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  150.   then
  151.    echo "Saving ramdrive to disk."
  152.    if [ ! -f $MCPATH/$SERVICE ]
  153.    then
  154.      echo "Error.. Minecraft not in ram"
  155.    else
  156.      if [ -d $MCSTORE/world2 ]
  157.      then
  158.        as_user "rm -r $MCSTORE/world2"
  159.      fi
  160.      if [ -d $MCSTORE/world ]
  161.      then
  162.      as_user "mv $MCSTORE/world $MCSTORE/world2"
  163.      fi
  164.  
  165.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Saving RAMdrive to disk.\"\015'"
  166.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  167.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  168.      as_user "cp -R $MCPATH/* $MCSTORE/"
  169.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  170.  
  171.      if [ -d $MCSTORE/world2 ]
  172.      then
  173.        as_user "rm -r $MCSTORE/world2"
  174.      fi
  175.    fi
  176.   else
  177.   echo "Service is not running"
  178.  fi
  179.  
  180. }
  181.  
  182. mc_disksavehalt() {
  183.    echo "Saving ramdrive to disk."
  184.    if [ ! -f $MCPATH/craftbukkit.jar ]
  185.    then
  186.      echo "Error.. Minecraft not in ram"
  187.    else
  188.      if [ -d $MCSTORE/world2 ]
  189.      then
  190.        as_user "rm -r $MCSTORE/world2"
  191.      fi
  192.      if [ -d $MCSTORE/world ]
  193.      then
  194.      as_user "mv $MCSTORE/world $MCSTORE/world2"
  195.      fi
  196.  
  197.      echo "Saving, screen session closed"
  198.      as_user "cp -R $MCPATH/* $MCSTORE/"
  199.  
  200.      if [ -d $MCSTORE/world2 ]
  201.      then
  202.        as_user "rm -r $MCSTORE/world2"
  203.      fi
  204.    fi
  205.  
  206.  
  207. }
  208.  
  209. mc_reboot_post() {
  210.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  211.         then
  212.                 echo "$SERVICE is running... stopping."
  213.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Saving map...\"\015'"
  214.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  215.                 sleep 5
  216.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ### Server Restarting! ###\"\015'"
  217.                 as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
  218.                 sleep 5
  219.         else
  220.                 echo "$SERVICE was not running."
  221.         fi
  222.         if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  223.         then
  224.                 echo "$SERVICE could not be shut down... still running."
  225.         else
  226.                 echo "$SERVICE is shut down."
  227.         fi
  228. }
  229.  
  230. mc_reboot_pre() {
  231.  
  232.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ###Auto Restart Scheduled###\"\015'"
  233.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ## Server Restart in 10 Minutes!\"\015'"
  234.     sleep 600
  235.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ## Server Restart in 5 Minutes! ##\"\015'"
  236.     sleep 300
  237.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ## Server Restart in 1 Minute! ##\"\015'"
  238.     sleep 60
  239.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ## Server Restart in 10 Seconds! ##\"\015'"
  240.     sleep 5
  241.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ## Server Restart in 5 Seconds! ##\"\015'"
  242.  
  243. }
  244.  
  245.  
  246. #Start-Stop here
  247. case "$1" in
  248.   start)
  249.     mc_start
  250.     ;;
  251.   stop)
  252.     mc_stop
  253.     mc_disksavehalt
  254.     ;;
  255.   reboot)
  256.     mc_reboot_pre
  257.     mc_reboot_post
  258.     mc_disksavehalt
  259.     mc_start
  260.     ;;
  261.   restart)
  262.     mc_stop
  263.     mc_disksavehalt
  264.     mc_start
  265.     ;;
  266.   update)
  267.     mc_stop
  268.     mc_backup
  269.     mc_update
  270.     mc_start
  271.     ;;
  272.   backup)
  273.     mc_disksaverun
  274.     mc_saveoff
  275.     mc_backup
  276.     mc_saveon
  277.     ;;
  278.   disksavehalt)
  279.     mc_disksavehalt
  280.     ;;
  281.   disksaverun)
  282.     mc_disksaverun
  283.     ;;
  284.   status)
  285.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  286.     then
  287.       echo "$SERVICE is running."
  288.     else
  289.       echo "$SERVICE is not running."
  290.     fi
  291.     ;;
  292.   serverup)
  293.       if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
  294.     then
  295.       echo "$SERVICE is running."
  296.     else
  297.       mc_start
  298.     fi
  299.     ;;
  300.  
  301.   *)
  302.   echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart|disksaverun}"
  303.   exit 1
  304.   ;;
  305. esac
  306.  
  307. exit 0
Advertisement
Add Comment
Please, Sign In to add comment