Advertisement
kreezxil

Linux Minecraft Start Stop Restart Bash Script

Nov 28th, 2013
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.82 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 0.3.10 2013-11-28 (YYYY-MM-DD)
  4. # Last modification by Kreezxil @ http://nobabies.info
  5.  
  6. # To make this intellegent add an entry into your /etc/cron.hourly/
  7. # to call this file with the required parameters.
  8. # If minecraft is running this script will stop, if minecraft is not, it will start your server
  9. # back up using the parameters as defined in the section settings below.
  10. #
  11. # See http://pastebin.com/AddvyRKF for my cron script
  12.  
  13. ### BEGIN INIT INFO
  14. # Provides:   minecraft
  15. # Required-Start: $local_fs $remote_fs
  16. # Required-Stop:  $local_fs $remote_fs
  17. # Should-Start:   $network
  18. # Should-Stop:    $network
  19. # Default-Start:  2 3 4 5
  20. # Default-Stop:   0 1 6
  21. # Short-Description:    Minecraft server
  22. # Description:    Starts the minecraft server
  23. ### END INIT INFO
  24.  
  25. #Settings
  26. SERVICE='ftbserver.jar'
  27. OPTIONS='nogui'
  28. USERNAME='root'
  29. WORLD='bupkis'
  30. MCPATH='/root/Unleashed'
  31. BACKUPPATH='/root/minecraft.backup'
  32. SESSIONNAME='unleashed'
  33. MAXHEAP=3584
  34. MINHEAP=1024
  35. HISTORY=128
  36. CPU_COUNT=4
  37. INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
  38. -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
  39. -jar $SERVICE $OPTIONS"
  40.  
  41. ME=`whoami`
  42. as_user() {
  43.   if [ $ME == $USERNAME ] ; then
  44.     bash -c "$1"
  45.   else
  46.     su - $USERNAME -c "$1"
  47.   fi
  48. }
  49.  
  50. mc_start() {
  51.   if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  52.   then
  53.     echo "$SERVICE is already running!"
  54.   else
  55.     echo "Starting $SERVICE..."
  56.     cd $MCPATH
  57.     as_user "cd $MCPATH && screen -h $HISTORY -dmS $SESSIONNAME $INVOCATION"
  58.     sleep 7
  59.     if pgrep -u $USERNAME -f $SERVICE > /dev/null
  60.     then
  61.       echo "$SERVICE is now running."
  62.     else
  63.       echo "Error! Could not start $SERVICE!"
  64.     fi
  65.   fi
  66. }
  67.  
  68. mc_saveoff() {
  69.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  70.   then
  71.     echo "$SERVICE is running... suspending saves"
  72.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  73.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"save-off\"\015'"
  74.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"save-all\"\015'"
  75.     sync
  76.     sleep 10
  77.   else
  78.     echo "$SERVICE is not running. Not suspending saves."
  79.   fi
  80. }
  81.  
  82. mc_saveon() {
  83.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  84.   then
  85.     echo "$SERVICE is running... re-enabling saves"
  86.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"save-on\"\015'"
  87.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  88.   else
  89.     echo "$SERVICE is not running. Not resuming saves."
  90.   fi
  91. }
  92.  
  93. mc_stop() {
  94.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  95.   then
  96.     echo "Stopping $SERVICE"
  97.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  98.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"save-all\"\015'"
  99.     sleep 10
  100.     as_user "screen -p 0 -S $SESSIONNAME -X eval 'stuff \"stop\"\015'"
  101.     sleep 30
  102.   else
  103.     echo "$SERVICE was not running."
  104.   fi
  105.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  106.   then
  107.     echo "Error! $SERVICE could not be stopped."
  108.   else
  109.     echo "$SERVICE is stopped."
  110.   fi
  111. }
  112.  
  113. mc_update() {
  114.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  115.   then
  116.     echo "$SERVICE is running! Will not start update."
  117.   else
  118.     MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
  119.     as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
  120.     if [ -f $MCPATH/minecraft_server.jar.update ]
  121.     then
  122.       if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
  123.       then
  124.         echo "You are already running the latest version of $SERVICE."
  125.       else
  126.         as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
  127.         echo "Minecraft successfully updated."
  128.       fi
  129.     else
  130.       echo "Minecraft update could not be downloaded."
  131.     fi
  132.   fi
  133. }
  134.  
  135. mc_backup() {
  136.    mc_saveoff
  137.    
  138.    NOW=`date "+%Y-%m-%d_%Hh%M"`
  139.    BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  140.    echo "Backing up minecraft world..."
  141.    #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  142.    as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"
  143.  
  144.    echo "Backing up $SERVICE"
  145.    as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  146.    #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
  147.  
  148.    mc_saveon
  149.  
  150.    echo "Compressing backup..."
  151.    as_user "gzip -f \"$BACKUP_FILE\""
  152.    echo "Done."
  153. }
  154.  
  155. mc_command() {
  156.   command="$1";
  157.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  158.   then
  159.     pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
  160.     echo "$SERVICE is running... executing command"
  161.     as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
  162.     sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  163.     # print output
  164.     tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
  165.   fi
  166. }
  167.  
  168. #Start-Stop here
  169. case "$1" in
  170.   start)
  171.     mc_start
  172.     ;;
  173.   stop)
  174.     mc_stop
  175.     ;;
  176.   restart)
  177.     mc_stop
  178.     mc_start
  179.     ;;
  180.   update)
  181.     mc_stop
  182.     mc_backup
  183.     mc_update
  184.     mc_start
  185.     ;;
  186.   backup)
  187.     mc_backup
  188.     ;;
  189.   status)
  190.     if pgrep -u $USERNAME -f $SERVICE > /dev/null
  191.     then
  192.       echo "$SERVICE is running."
  193.     else
  194.       echo "$SERVICE is not running."
  195.     fi
  196.     ;;
  197.   command)
  198.     if [ $# -gt 1 ]; then
  199.       shift
  200.       mc_command "$*"
  201.     else
  202.       echo "Must specify server command (try 'help'?)"
  203.     fi
  204.     ;;
  205.  
  206.   *)
  207.   echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
  208.   exit 1
  209.   ;;
  210. esac
  211.  
  212. exit 0
  213.  
  214. [[Category:Guides]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement