Advertisement
Guest User

rc.minecraft

a guest
Apr 8th, 2012
809
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.15 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 0.3.7 2012-03-06 (YYYY-MM-DD)
  4. # Updated by agentc0re
  5. # version 0.3.8 2012-04-08
  6. # Changed script to work for rtoolkit
  7.  
  8. ### BEGIN INIT INFO
  9. # Provides:   minecraft
  10. # Required-Start: $local_fs $remote_fs
  11. # Required-Stop:  $local_fs $remote_fs
  12. # Should-Start:   $network
  13. # Should-Stop:    $network
  14. # Default-Start:  2 3 4 5
  15. # Default-Stop:   0 1 6
  16. # Short-Description:    Minecraft server
  17. # Description:    Starts the minecraft server
  18. ### END INIT INFO
  19.  
  20. #Settings
  21.  
  22. #Linux username that the service will run as
  23. USERNAME='minecraft'
  24. MCPATH='/home/minecraft/Minecraft'
  25.  
  26. #screen path location.
  27. SCREEN=$(which screen)
  28.  
  29. #Java path location and options.  The path should
  30. #be found automatically, but you can specify it manually
  31. #if you run into issues.
  32. #JAVA="/PATH/TO/JAVA"
  33. JAVA=$(which java)
  34. JAVAOPTS="-Xmx30M -Xms30M -XX:MaxPermSize=40M"
  35.  
  36. #User and Pass for rtoolkit
  37. USER=
  38. PASS=
  39. SERVICE='Minecraft_RKit.jar'
  40. INVOCATION="$JAVA $JAVAOPTS -jar $SERVICE $USER:$PASS"
  41.  
  42. ####
  43. # Shouldn't need to edit anything below this line
  44. ####
  45.  
  46. ME=`whoami`
  47. as_user() {
  48.   if [ $ME == $USERNAME ] ; then
  49.     bash -c "$1"
  50.   else
  51.     su - $USERNAME -c "$1"
  52.   fi
  53. }
  54.  
  55. mc_start() {
  56.   if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  57.   then
  58.     echo "$SERVICE is already running!"
  59.   else
  60.     echo "Starting $SERVICE..."
  61.     cd $MCPATH
  62.     as_user "cd $MCPATH && $SCREEN -dmS minecraft $INVOCATION"
  63.     sleep 7
  64.     if pgrep -u $USERNAME -f $SERVICE > /dev/null
  65.     then
  66.       echo "$SERVICE is now running."
  67.     else
  68.       echo "Error! Could not start $SERVICE!"
  69.     fi
  70.   fi
  71. }
  72.  
  73. mc_saveoff() {
  74.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  75.   then
  76.     echo "$SERVICE is running... suspending saves"
  77.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  78.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  79.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  80.     sync
  81.     sleep 10
  82.   else
  83.     echo "$SERVICE is not running. Not suspending saves."
  84.   fi
  85. }
  86.  
  87. mc_saveon() {
  88.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  89.   then
  90.     echo "$SERVICE is running... re-enabling saves"
  91.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  92.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  93.   else
  94.     echo "$SERVICE is not running. Not resuming saves."
  95.   fi
  96. }
  97.  
  98. mc_stop() {
  99.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  100.   then
  101.     echo "Stopping $SERVICE"
  102.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  103.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  104.     sleep 10
  105.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \".stopwrapper\"\015'"
  106.     sleep 15
  107.   else
  108.     echo "$SERVICE was not running."
  109.   fi
  110.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  111.   then
  112.     echo "Error! $SERVICE could not be stopped."
  113.   else
  114.     echo "$SERVICE is stopped."
  115.   fi
  116. }
  117.  
  118. mc_command() {
  119.   command="$1";
  120.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  121.   then
  122.     pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
  123.     echo "$SERVICE is running... executing command"
  124.     as_user "$SCREEN -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
  125.     sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  126.     # print output
  127.     tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
  128.   fi
  129. }
  130.  
  131. #Start-Stop here
  132. case "$1" in
  133.   start)
  134.     mc_start
  135.     ;;
  136.   stop)
  137.     mc_stop
  138.     ;;
  139.   restart)
  140.     mc_stop
  141.     mc_start
  142.     ;;
  143.   status)
  144.     if pgrep -u $USERNAME -f $SERVICE > /dev/null
  145.     then
  146.       echo "$SERVICE is running."
  147.     else
  148.       echo "$SERVICE is not running."
  149.     fi
  150.     ;;
  151.   command)
  152.     if [ $# -gt 1 ]; then
  153.       shift
  154.       mc_command "$*"
  155.     else
  156.       echo "Must specify server command (try 'help'?)"
  157.     fi
  158.     ;;
  159.  
  160.   *)
  161.   echo "Usage: $0 {start|stop|status|restart|command \"server command\"}"
  162.   exit 1
  163.   ;;
  164. esac
  165.  
  166. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement