LaoArchAngel icon

Infinity Java 7 Startup

LaoArchAngel | PRO | 07/16/15 04:55:47 PM UTC | 0 ⭐ | 378 👁️ | Never ⏰ | []
Bash |

5.23 KB

|

None

|

0 👍

/

0 👎

#!/usr/bin/bash
 
# Source from http://minecraft.gamepedia.com/Tutorials/Server_startup_script
# Made changes to suit my needs, now serves as a proper croncheck script
# There will be bugs.  Fix them.  Send me a note about it if you like and
# I'll include them.  I can be reached on reddit as /u/jbranscum
# This is open source.  Don't be a jerk.  Give credit where it is due if you
# decide to modify this script as I have done
#
# Replace HOMEDIR, MCUSERNAME, MCSERVERDIR as needed.
# Cron entry should look like so:
# */5 * * * * /home/HOMEDIR/scripts/mcinit croncheck
# 30 04 * * * /home/HOMEDIR/scripts/mcinit restart
#
# You need screen, uuencode and mailx for this script in addition to standard bash tools (pgrep, etc)
# I cannot provide support on this.  Use at your own risk.  You have been warned.
#
# If you're unsure of yourself, see the following: http://youtu.be/nuHfVn_cfHU
#
# Also, these are Java 8 settings to use 4/8 gig ram.  If you have Java 7, make changes!
 
#Settings
PATH=/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
SERVICE='KCauldron.jar'
OPTIONS='nogui'
USERNAME='root'
MCPATH='/usr/local/games/minecraft/infinity'
MCNOSTART=$MCPATH/.nostart
MCCRASH=$MCPATH/crash-reports
MCLOG=$MCPATH/logs/fml-server-latest.log
MAXHEAP=4096
MINHEAP=2048
PERM=256
HISTORY=1024
CPU_COUNT=8
INVOCATION="java -server \
 -Xms${MINHEAP}m \
 -Xmx${MAXHEAP}m \
 -XX:PermSize=${PERM}m \
 -XX:d64 \
 -XX:+UseParNewGC \
 -XX:+CMSIncrementalPacing \
 -XX:+CMSClassUnloadingEnabled \
 -XX:ParallelGCThreads=2 \
 -XX:MinHeapFreeRatio=5 \
 -XX:MaxHeapFreeRatio=10 \
 -Djava.net.preferIPv4Stack=true \
 -jar $SERVICE $OPTIONS"
 
ME=`whoami`
as_user() {
  if [ "$ME" = "$USERNAME" ] ; then
    bash -c "$1"
  else
    su - "$USERNAME" -c "$1"
  fi
}
 
mc_start() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $MCPATH
    as_user "cd $MCPATH && screen -h $HISTORY -dmS minecraft $INVOCATION"
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $SERVICE!"
    fi
  fi
}
 
mc_disableAuto() {
    echo "Disabling autostart"
    touch $MCNOSTART
}
 
mc_enableAuto() {
  if [[ -a $MCNOSTART ]] ; then 
    echo "Enabling autostart"
    rm $MCNOSTART
  fi
}
 
mc_stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SHUTTING DOWN IN 60 SECONDS.\"\015'"
    sleep 30
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SHUTTING DOWN IN 30 SECONDS.\"\015'"
    sleep 15
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SHUTTING DOWN IN 15 SECONDS.\"\015'"
    sleep 15
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
    sleep 15
  else
    echo "$SERVICE was not running."
  fi
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
} 
 
mc_restartannounce() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Broadcasting Restart"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SCHEDULED RESTART IMMINENT, RESISTANCE IS FUTILE\"\015'"
    sleep 20
  else
    echo "$SERVICE was not running."
    exit 1
  fi
} 
 
mc_stopnow() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SHUTTING DOWN IN 5 SECONDS.\"\015'"
    sleep 5
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
    sleep 15
  else
    echo "$SERVICE was not running."
  fi
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
} 
 
mc_logcheck() {
  CRASH=$(find $MCCRASH -maxdepth 1 -name '*.log' -print -quit -cmin -60)
  MCLOGLAST=$(stat -x $MCLOG)
  MCLOGDATA=$(tail -n 150 $MCLOG)
  if [[ -n $CRASH ]] ; then
    echo "We have a crash log: $CRASH"
    echo "Sending email to local account"
    ( $MCLOGLAST ; tail -n 150 $MCLOG ; uuencode $CRASH $CRASH ) | mailx -s "Minecraft Server Crash" $USERNAME
  else
    if [[ ! -a $MCNOSTART ]] ; then
      echo "Server not running, Autostart enabled"
      echo "Last log entry from FML:"
      stat -f "%m%t%Sm %N" $MCLOG | cut -f2
      echo "Restarting Minecraft Server"
      sleep 10
      mc_start
    fi
  fi
}
 
#Start-Stop here
case "$1" in
  start)
    mc_start
    mc_enableAuto
    ;;
  stop)
    mc_disableAuto
    mc_stop
    ;;
  stopnow)
    mc_disableAuto
    mc_stopnow
    ;;
  restart)
    mc_disableAuto
    mc_restartannounce
    mc_stopnow
    sleep 20
    mc_start
    mc_enableAuto
    ;;
  status)
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;
  croncheck)
    if ! pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      mc_logcheck
    fi
    ;;
  *)
  echo "Usage: $0 {start|stop|stopnow|restart|status|croncheck}"
  exit 1
  ;;
esac
 
exit 0

Comments