zeplintwo

Start script and keep alive for MC servers on linux

May 23rd, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 9.83 KB | None | 0 0
  1. #!/bin/bash
  2. #/etc/init.d/empy_infinity
  3. #version 0.1 2015-4-1 (YYYY-MM-DD)
  4.  
  5. ### BEGIN INIT INFO
  6. # Provides:          Infinity Minecraft Service
  7. # Required-Start:    $local_fs $remote_fs screen-cleanup
  8. # Required-Stop:     $local_fs $remote_fs
  9. # Should-Start:      $network
  10. # Should-Stop:       $network
  11. # X-Interactive:     true
  12. # Default-Start:     2 3 4 5
  13. # Default-Stop:      0 1 6
  14. # Short-Description: Infinity Minecraft server control service
  15. ### END INIT INFO
  16.  
  17. #Settings
  18.  SERVERTYPE='Infinity'
  19.  SCREENNAME='infinity'
  20.  SERVICE='FTBServer-1.7.10-1291.jar'
  21.  OPTIONS='nogui'
  22.  USERNAME='root'
  23.  MCPATH='/home/minecraft/server/infinity'
  24.  WORLDPATH='/home/minecraft/server/infinity/world_server/'
  25.  declare -a DIM_MONTH_CLEANER=("DIM-1" "DIM1" "DIM-100" "DIM_MYST3" "DIM-34")
  26.  declare -a DIM_RESTART_CLEANER=("DIM4" "DIM5" "DIM6" "DIM7" "DIM8" "DIM10" "DIM_MYST9" "DIM_MYST11" "DIM_MYST12" "DIM34")
  27.  MAXHEAP=8
  28.  MINHEAP=2
  29.  HISTORY=5000
  30.  SCROLLBACK=5000
  31.  INVOCATION="java -server -Xmx${MAXHEAP}G -Xms${MINHEAP}G -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:+UseLargePages -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+OptimizeStringConcat -XX:+UseBiasedLocking -Xincgc -XX:MaxGCPauseMillis=10 -XX:SoftRefLRUPolicyMSPerMB=10000 -XX:+CMSParallelRemarkEnabled -XX:ParallelGCThreads=10 -Djava.net.preferIPv4Stack=true -jar $SERVICE $OPTIONS"
  32.  
  33. mc_start() {
  34.    if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  35.    then
  36.      echo "`date`: $SERVERTYPE is already running!"
  37.    else
  38.      echo "`date`: Starting $SERVERTYPE..."
  39.      cd $MCPATH
  40.      cd $MCPATH && screen -h $HISTORY -dmS $SCREENNAME $INVOCATION $OPTIONS
  41.      sleep 10
  42.      echo "`date`: Server $SERVERTYPE still starting..."
  43.      sleep 10
  44.      if pgrep -u $USERNAME -f $SERVICE > /dev/null
  45.      then
  46.        echo "`date`: $SERVERTYPE is now running."
  47.      else
  48.        echo "`date`: Error! Could not start $SERVERTYPE!"
  49.      fi
  50.    fi
  51.  }
  52.  
  53. mc_stop_now() {
  54.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  55.    then
  56.      echo "`date`: Crash Stopping $SERVERTYPE..."
  57.      screen -S $SCREENNAME -X stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."
  58.      screen -S $SCREENNAME -X eval "stuff \015"
  59.      sleep 10
  60.      screen -S $SCREENNAME -X stuff "save-all"
  61.      screen -S $SCREENNAME -X eval "stuff \015"
  62.      sleep 1
  63.      screen -S $SCREENNAME -X stuff "stop"
  64.      screen -S $SCREENNAME -X eval "stuff \015"
  65.      sleep 10
  66.    else
  67.      echo "`date`: $SERVERTYPE was not running."
  68.    fi
  69.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  70.    then
  71.      echo "`date`: Error! $SERVERTYPE could not be stopped."
  72.    else
  73.      echo "`date`: $SERVERTYPE is stopped."
  74.    fi
  75. }
  76.  
  77. mc_stop_restart() {
  78.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  79.    then
  80.      echo "`date`: Stopping $SERVERTYPE..."
  81.      screen -S $SCREENNAME -X stuff "say Server restarting in 20 minute."
  82.      screen -S $SCREENNAME -X eval "stuff \015"
  83.      sleep 300
  84.      screen -S $SCREENNAME -X stuff "say Server restarting in 15 minute."
  85.      screen -S $SCREENNAME -X eval "stuff \015"
  86.      sleep 300
  87.      screen -S $SCREENNAME -X stuff "say Server restarting in 10 minute."
  88.      screen -S $SCREENNAME -X eval "stuff \015"
  89.      sleep 300
  90.      screen -S $SCREENNAME -X stuff "say Server restarting in 5 minute."
  91.      screen -S $SCREENNAME -X eval "stuff \015"
  92.      sleep 240
  93.      screen -S $SCREENNAME -X stuff "say Server restarting in 1 minute."
  94.      screen -S $SCREENNAME -X eval "stuff \015"
  95.      sleep 30
  96.      screen -S $SCREENNAME -X stuff "say Server restarting in 30 seconds."
  97.      screen -S $SCREENNAME -X eval "stuff \015"
  98.      sleep 15
  99.      screen -S $SCREENNAME -X stuff "say Server restarting in 15 seconds."
  100.      screen -S $SCREENNAME -X eval "stuff \015"
  101.      sleep 5
  102.      screen -S $SCREENNAME -X stuff "say Server restarting in 10 seconds."
  103.      screen -S $SCREENNAME -X eval "stuff \015"
  104.      sleep 5
  105.      screen -S $SCREENNAME -X stuff "say Server restarting in 5 seconds."
  106.      screen -S $SCREENNAME -X eval "stuff \015"
  107.      sleep 1
  108.      screen -S $SCREENNAME -X stuff "say Server restarting in 4 seconds."
  109.      screen -S $SCREENNAME -X eval "stuff \015"
  110.      sleep 1
  111.      screen -S $SCREENNAME -X stuff "say Server restarting in 3 seconds."
  112.      screen -S $SCREENNAME -X eval "stuff \015"
  113.      sleep 1
  114.      screen -S $SCREENNAME -X stuff "say Server restarting in 2 seconds."
  115.      screen -S $SCREENNAME -X eval "stuff \015"
  116.      sleep 1
  117.      screen -S $SCREENNAME -X stuff "say Server restarting in 1 second."
  118.      screen -S $SCREENNAME -X eval "stuff \015"
  119.      sleep 1
  120.      screen -S $SCREENNAME -X stuff "say Server is restarting please come back in 2 minutes"
  121.      screen -S $SCREENNAME -X eval "stuff \015"
  122.      sleep 1
  123.      screen -S $SCREENNAME -X stuff "save-all"
  124.      screen -S $SCREENNAME -X eval "stuff \015"
  125.      sleep 1
  126.      screen -S $SCREENNAME -X stuff "stop"
  127.      screen -S $SCREENNAME -X eval "stuff \015"
  128.      sleep 15
  129.    else
  130.      echo "`date`: $SERVERTYPE was not running."
  131.    fi
  132.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  133.    then
  134.      echo "`date`: Error! $SERVERTYPE could not be stopped."
  135.    else
  136.      echo "`date`: $SERVERTYPE is stopped."
  137.    fi
  138.  }
  139.  
  140. mc_stop_shutdown() {
  141.   if pgrep -u $USERNAME -f $SERVICE > /dev/null
  142.    then
  143.      echo "`date`: Stopping $SERVERTYPE"
  144.      screen -S $SCREENNAME -X stuff "say Server restarting in 20 minute, With, Dedi restart, up to 20 minutes of downtime."
  145.      screen -S $SCREENNAME -X eval "stuff \015"
  146.      sleep 300
  147.      screen -S $SCREENNAME -X stuff "say Server restarting in 15 minute, With, Dedi restart, up to 20 minutes of downtime."
  148.      screen -S $SCREENNAME -X eval "stuff \015"
  149.      sleep 300
  150.      screen -S $SCREENNAME -X stuff "say Server restarting in 10 minute, With, Dedi restart, up to 20 minutes of downtime."
  151.      screen -S $SCREENNAME -X eval "stuff \015"
  152.      sleep 300
  153.      screen -S $SCREENNAME -X stuff "say Server restarting in 5 minute, With, Dedi restart, up to 20 minutes of downtime."
  154.      screen -S $SCREENNAME -X eval "stuff \015"
  155.      sleep 240
  156.      screen -S $SCREENNAME -X stuff "say Server restarting in 1 minute, With, Dedi restart, up to 20 minutes of downtime."
  157.      screen -S $SCREENNAME -X eval "stuff \015"
  158.      sleep 30
  159.      screen -S $SCREENNAME -X stuff "say Server restarting in 30 seconds, With, Dedi restart, up to 20 minutes of downtime."
  160.      screen -S $SCREENNAME -X eval "stuff \015"
  161.      sleep 15
  162.      screen -S $SCREENNAME -X stuff "say Server restarting in 15 seconds, With, Dedi restart, up to 20 minutes of downtime."
  163.      screen -S $SCREENNAME -X eval "stuff \015"
  164.      sleep 5
  165.      screen -S $SCREENNAME -X stuff "say Server restarting in 10 seconds, With, Dedi restart, up to 20 minutes of downtime."
  166.      screen -S $SCREENNAME -X eval "stuff \015"
  167.      sleep 5
  168.      screen -S $SCREENNAME -X stuff "say Server restarting in 5 seconds, With, Dedi restart, up to 20 minutes of downtime."
  169.      screen -S $SCREENNAME -X eval "stuff \015"
  170.      sleep 1
  171.      screen -S $SCREENNAME -X stuff "say Server restarting in 4 seconds, With, Dedi restart, up to 20 minuts of downtime."
  172.      screen -S $SCREENNAME -X eval "stuff \015"
  173.      sleep 1
  174.      screen -S $SCREENNAME -X stuff "say Server restarting in 3 seconds."
  175.      screen -S $SCREENNAME -X eval "stuff \015"
  176.      sleep 1
  177.      screen -S $SCREENNAME -X stuff "say Server restarting in 2 seconds."
  178.      screen -S $SCREENNAME -X eval "stuff \015"
  179.      sleep 1
  180.      screen -S $SCREENNAME -X stuff "say Server restarting in 1 second."
  181.      screen -S $SCREENNAME -X eval "stuff \015"
  182.      sleep 1
  183.      screen -S $SCREENNAME -X stuff "say Server is restarting please come back in 20 minutes"
  184.      screen -S $SCREENNAME -X eval "stuff \015"
  185.      sleep 1
  186.      screen -S $SCREENNAME -X stuff "save-all"
  187.      screen -S $SCREENNAME -X eval "stuff \015"
  188.      sleep 1
  189.      screen -S $SCREENNAME -X stuff "stop"
  190.      screen -S $SCREENNAME -X eval "stuff \015"
  191.      sleep 15
  192.    else
  193.      echo "`date`: $SERVERTYPE was not running."
  194.    fi
  195.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  196.    then
  197.      echo "`date`: Error! $SERVERTYPE could not be stopped."
  198.    else
  199.      echo "`date`: $SERVERTYPE is stopped."
  200.    fi
  201.  }
  202.  
  203. mc_monthly_cleanup() {
  204.  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  205.    then
  206.      echo "`date`: $SERVERTYPE is already running can not start monthly cleaning!"
  207.    else
  208.      echo "`date`: Starting monthly cleanup $SERVERTYPE..."
  209.       for dim_curr in "${DIM_MONTHLY_CLEANER[@]}"
  210.        do
  211.         lcpath="$WORLDPATH$dim_curr"
  212.         rm -rf $lcpath
  213.        done
  214.      echo "`date`: Monthly cleaning complete for $SERVERTYPE."
  215.    fi
  216.  }
  217.  
  218. mc_restart_cleanup() {
  219.  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  220.    then
  221.      echo "`date`: $SERVERTYPE is already running can not start restart cleaning!"
  222.    else
  223.      echo "`date`: Starting restart cleanup $SERVERTYPE..."
  224.      for dim_curr in "${DIM_RESTART_CLEANER[@]}"
  225.        do
  226.          lcpath="$WORLDPATH$dim_curr"
  227.          rm -rf $lcpath
  228.        done
  229.     echo "`date`: Restart cleanup done for $SERVERTYPE."
  230.   fi
  231.  }
  232.  
  233.  
  234. #Start-Stop here
  235.  case "$1" in
  236.    start)
  237.      mc_restart_cleanup
  238.      sleep 2
  239.      mc_start
  240.      ;;
  241.    stop_delay)
  242.      mc_stop_restart
  243.      echo "`date`: dedi stop ready..."
  244.      ;;
  245.    restart)
  246.      mc_stop_restart
  247.      sleep 2
  248.      mc_restart_cleanup
  249.      sleep 2
  250.      mc_start
  251.      ;;
  252.    status)
  253.      if pgrep -u $USERNAME -f $SERVICE > /dev/null
  254.      then
  255.        echo "`date`: $SERVERTYPE is running."
  256.      else
  257.        echo "`date`: $SERVERTYPE is not running."
  258.      fi
  259.      ;;
  260.    stop)
  261.      mc_stop_now
  262.      ;;
  263.    dedi_restart)
  264.      mc_stop_shutdown
  265.      ;;
  266.    monthly_cleanup)
  267.      mc_monthly_cleanup
  268.      ;;
  269.    *)
  270.    echo "Usage: $0 {start|stop|stop_delay|status|restart|dedi_restart|monthly_cleanup}"
  271.    exit 1
  272.    ;;
  273.  esac
  274. exit 0
Add Comment
Please, Sign In to add comment