smbarbour

minecraft init.d script

Feb 15th, 2013
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.35 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 1.0 2013-02-08
  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='mc_server.jar'
  19. USERNAME="minecraft"
  20. MCPATH='/opt/CAH_147'
  21. CRASHLOG_DB_PATH='/home/minecraft/crashlogs/'
  22. JAVA_HOME='/usr/lib/jvm/java-7-oracle/jre'
  23. CPU_COUNT=1
  24. MEMORY_OPTS='-Xmx2G -Xms2G'
  25. JAVA_OPTS='-Xincgc'
  26. INVOCATION="${JAVA_HOME}/bin/java ${MEMORY_OPTS} ${JAVA_OPTS} -jar ${SERVICE} nogui"
  27. BACKUPPATH='/home/minecraft/backup'
  28. BACKUPDIR=`date +%b_%Y`
  29. CONSOLELOG='/home/minecraft/console.log'
  30.  
  31. ME=`whoami`
  32. as_user() {
  33.     if [ $ME == $USERNAME ] ; then
  34.         bash -c "$1"
  35.     else
  36.         su - $USERNAME -c "$1"
  37.             fi
  38. }
  39.  
  40. is_running() {
  41.     if ps ax | grep -v grep | grep java | grep -v -i SCREEN | grep $SERVICE > /dev/null
  42.         then
  43.             return 0
  44.     else
  45.         return 1
  46.             fi
  47. }
  48.  
  49. mc_start() {
  50.     if is_running
  51.         then
  52.             echo "Tried to start but $SERVICE was already running!"
  53.             return 1
  54.     else
  55.         echo "$SERVICE was not running... starting."
  56.             cd $MCPATH
  57.             as_user "cd $MCPATH && byobu -dmS minecraft bash -c '$INVOCATION 2>&1 | tee $CONSOLELOG'"
  58.             sleep 7
  59.             if is_running
  60.                 then
  61.                     echo "$SERVICE is now running."
  62.                     return 0
  63.             else
  64.                 echo "Could not start $SERVICE."
  65.                     return 1
  66.                     fi
  67.                     fi
  68. }
  69.  
  70. mc_saveoff() {
  71.     if is_running
  72.         then
  73.             echo "$SERVICE is running... suspending saves"
  74.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  75.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  76.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  77.             sync
  78.             sleep 10
  79.     else
  80.         echo "$SERVICE was not running. Not suspending saves."
  81.             fi
  82. }
  83.  
  84. mc_saveon() {
  85.     if is_running
  86.         then
  87.             echo "$SERVICE is running... re-enabling saves"
  88.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  89.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  90.     else
  91.         echo "$SERVICE was not running. Not resuming saves."
  92.             fi
  93. }
  94.  
  95. mc_kill() {
  96.     pid=`ps ax | grep -v grep | grep java | grep -i SCREEN | grep $SERVICE | awk '{ print $1 }'`
  97.  
  98.         if [ -z $pid ]; then
  99.             echo "unable to retrieve pid"
  100.         else
  101.             echo "killing process with pid $pid"
  102.                 kill $pid
  103.                 sleep 2
  104.  
  105.                 if is_running; then
  106.                     echo "$SERVICE could not be killed... still running"
  107.                 else
  108.                     echo "$SERVICE killed"
  109.                         fi
  110.                         fi
  111. }
  112.  
  113. mc_stop() {
  114.     if is_running
  115.         then
  116.             echo "$SERVICE is running... stopping."
  117.  
  118.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  119.             as_user "byoub -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  120.             sleep 10
  121.             as_user "byoub -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
  122.             sleep 12
  123.  
  124.     else
  125.         echo "$SERVICE was not running."
  126.             fi
  127.             if is_running
  128.                 then
  129.                     echo "$SERVICE could not be shut down cleanly... still running."
  130.                     mc_kill
  131.             else
  132.                 echo "$SERVICE is shut down."
  133.                     fi
  134. }
  135.  
  136. mc_backup() {
  137.     echo "Backing up minecraft world"
  138.  
  139.         [ -d $BACKUPPATH/$BACKUPDIR ] || as_user "mkdir $BACKUPPATH/$BACKUPDIR"
  140.  
  141.         as_user "rdiff-backup $MCPATH $BACKUPPATH/$BACKUPDIR"
  142.  
  143.         echo "Backup complete"
  144. }
  145.  
  146. mc_execservercmd() {
  147.     if is_running
  148.         then
  149.             as_user "byobu -p 0 -S minecraft -X eval 'stuff \"$1\"\015'"
  150.     else
  151.         echo "$SERVICE was not running. Not executing command."
  152.             fi
  153. }
  154.  
  155. mc_dumpcrashlogs() {
  156.     if is_running
  157.         then
  158.             as_user "cp $MCPATH/crash-reports/* $CRASHLOG_DB_PATH"
  159.             as_user "mv $MCPATH/crash-reports/* $MCPATH/crash-reports.archive/"
  160.             fi
  161. }
  162.  
  163. #Start-Stop here
  164. case "$1" in
  165.     start)
  166.         mc_start
  167.         ;;
  168.     stop)
  169.         mc_stop
  170.         ;;
  171.     restart)
  172.         mc_stop
  173.         mc_start
  174.         ;;
  175.     backup)
  176.         mc_saveoff
  177.         mc_backup
  178.         mc_saveon
  179.         ;;
  180.     execservercmd)
  181.         mc_execservercmd "$2"
  182.         ;;
  183.     dumpcrashlogs)
  184.         mc_dumpcrashlogs
  185.         ;;
  186.     status)
  187.         if is_running
  188.         then
  189.             echo "$SERVICE is running."
  190.         else
  191.             echo "$SERVICE is not running."
  192.         fi
  193.         ;;
  194.  
  195.     *)
  196.     echo "Usage: /etc/init.d/minecraft {start|stop|restart|backup|execservercmd|dumpcrashlogs|status}"
  197.     exit 1
  198.     ;;
  199. esac
  200.  
  201. exit 0
Advertisement
Add Comment
Please, Sign In to add comment