Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.66 KB | None | 0 0
  1.  #!/bin/bash
  2.  # /etc/init.d/minecraft
  3.  # version 0.4.0 2015-04-20 (YYYY-MM-DD)
  4.  #
  5.  ### BEGIN INIT INFO
  6.  # Provides:   minecraft
  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.  # 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='forge-1.7.10-10.13.4.1481-1.7.10-universal.jar'
  19.  OPTIONS='nogui'
  20.  USERNAME='DoughnutDev'
  21.  WORLD='world'
  22.  MCPATH='/home/DoughnutDev/DonutCraft2'
  23.  BACKUPPATH='/home/DoughnutDev/DonutCraft2/backup'
  24.  OLDBACKUPS=1
  25.  MAXHEAP=3500
  26.  MINHEAP=1024
  27.  HISTORY=1024
  28.  CPU_COUNT=4
  29.  INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
  30. -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts \
  31. -jar $SERVICE $OPTIONS"
  32.  
  33.  ME=`whoami`
  34.  as_user() {
  35.    if [ "$ME" = "$USERNAME" ] ; then
  36.      bash -c "$1"
  37.    else
  38.      su - "$USERNAME" -c "$1"
  39.    fi
  40.  }
  41.  
  42.  mc_start() {
  43.    if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  44.    then
  45.      echo "$SERVICE is already running!"
  46.    else
  47.      echo "Starting $SERVICE..."
  48.      cd $MCPATH
  49.      as_user "cd $MCPATH && screen -h $HISTORY -dmS DonutCraft $INVOCATION"
  50.      sleep 7
  51.      if pgrep -u $USERNAME -f $SERVICE > /dev/null
  52.      then
  53.        echo "$SERVICE is now running."
  54.      else
  55.        echo "Error! Could not start $SERVICE!"
  56.      fi
  57.    fi
  58.  }
  59.  
  60.  mc_saveoff() {
  61.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  62.    then
  63.      echo "$SERVICE is running... suspending saves"
  64.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  65.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  66.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  67.      sync
  68.      sleep 10
  69.    else
  70.      echo "$SERVICE is not running. Not suspending saves."
  71.    fi
  72.  }
  73.  
  74.  mc_saveon() {
  75.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  76.    then
  77.      echo "$SERVICE is running... re-enabling saves"
  78.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  79.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  80.    else
  81.      echo "$SERVICE is not running. Not resuming saves."
  82.    fi
  83.  }
  84.  
  85.  mc_stop() {
  86.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  87.    then
  88.      echo "Stopping $SERVICE"
  89.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER RESTARTING IN 10 SECONDS. Saving map...\"\015'"
  90.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  91.      sleep 10
  92.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
  93.      sleep 7
  94.    else
  95.      echo "$SERVICE was not running."
  96.    fi
  97.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  98.    then
  99.      echo "Error! $SERVICE could not be stopped."
  100.    else
  101.      echo "$SERVICE is stopped."
  102.    fi
  103.  }
  104.  
  105.  mc_update() {
  106.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  107.    then
  108.      echo "$SERVICE is running! Will not start update."
  109.    else
  110.      as_user "cd $MCPATH && wget -q -O $MCPATH/versions http://s3.amazonaws.com/Minecraft.Download/versions/versions.json"
  111.     snap=`awk -v linenum=3 'NR == linenum {print; exit}' "$MCPATH/versions"`
  112.     snapVersion=`echo $snap | awk -F'\"' '{print $4}'`
  113.     re=`awk -v linenum=4 'NR == linenum {print; exit}' "$MCPATH/versions"`
  114.     reVersion=`echo $re | awk -F'\"' '{print $4}'`
  115.     as_user "rm $MCPATH/versions"
  116.     if [ "$1" == "snapshot" ]; then
  117.     MC_SERVER_URL=http://s3.amazonaws.com/Minecraft.Download/versions/$snapVersion/minecraft_server.$snapVersion.jar
  118.     else
  119.     MC_SERVER_URL=http://s3.amazonaws.com/Minecraft.Download/versions/$reVersion/minecraft_server.$reVersion.jar
  120.     fi
  121.      as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
  122.      if [ -f $MCPATH/minecraft_server.jar.update ]
  123.      then
  124.        if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
  125.        then
  126.          echo "You are already running the latest version of $SERVICE."
  127.        else
  128.          as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
  129.          echo "Minecraft successfully updated."
  130.        fi
  131.      else
  132.        echo "Minecraft update could not be downloaded."
  133.      fi
  134.    fi
  135.  }
  136.  
  137.  mc_backup() {
  138.     mc_saveoff
  139.    
  140.     NOW=`date "+%Y-%m-%d_%Hh%M"`
  141.     BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  142.     echo "Backing up minecraft world..."
  143.     #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  144.     as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"
  145.  
  146.     echo "Backing up $SERVICE"
  147.     as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  148.     #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
  149.  
  150.     mc_saveon
  151.  
  152.  
  153.     if [ $OLDBACKUPS -lt 0 ]
  154.        then
  155.     OLDBACKUPS=3
  156.       fi
  157.  
  158.     # Deletes backups that are 'n' days old
  159.        if [ $LOGIT -eq 1 ]
  160.          then
  161.             echo "$(date "+%Y-%m-%d_%Hh%M") [LOG] Removing backups older than $OLDBACKUPS days."
  162.               fi
  163.                 OLDBACKUP=`find $PWD/$BACKUPDIR -type d -mtime +$OLDBACKUPS | grep -v -x "$PWD/$BACKUPDIR" | xargs rm -rf`
  164.  
  165.     echo "Compressing backup..."
  166.     as_user "gzip -f \"$BACKUP_FILE\""
  167.     echo "Done."
  168.  }
  169.  
  170.  mc_command() {
  171.    command="$1";
  172.    if pgrep -u $USERNAME -f $SERVICE > /dev/null
  173.    then
  174.      pre_log_len=`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`
  175.      echo "$SERVICE is running... executing command"
  176.      as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
  177.      sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  178.      # print output
  179.      tail -n $[`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/logs/latest.log"
  180.    fi
  181.  }
  182.  
  183.  #Start-Stop here
  184.  case "$1" in
  185.    start)
  186.      mc_start
  187.      ;;
  188.    stop)
  189.      mc_stop
  190.      ;;
  191.    restart)
  192.      mc_stop
  193.      mc_start
  194.      ;;
  195.    update)
  196.      mc_stop
  197.      mc_backup
  198.      mc_update $2
  199.      mc_start
  200.      ;;
  201.    backup)
  202.      mc_backup
  203.      ;;
  204.    status)
  205.      if pgrep -u $USERNAME -f $SERVICE > /dev/null
  206.      then
  207.        echo "$SERVICE is running."
  208.      else
  209.        echo "$SERVICE is not running."
  210.      fi
  211.      ;;
  212.    command)
  213.      if [ $# -gt 1 ]; then
  214.        shift
  215.        mc_command "$*"
  216.      else
  217.        echo "Must specify server command (try 'help'?)"
  218.      fi
  219.      ;;
  220.  
  221.    *)
  222.    echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
  223.    exit 1
  224.    ;;
  225.  esac
  226.  
  227.  exit 0
  228. </pre>
  229. <noinclude>[[Category:Data pages]]</noinclude>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement