Skip to content

Instantly share code, notes, and snippets.

@deckerego
Created December 6, 2013 22:11
Show Gist options
  • Save deckerego/7833021 to your computer and use it in GitHub Desktop.
Save deckerego/7833021 to your computer and use it in GitHub Desktop.
Linux startup script for a Minecraft dedicated server
#!/bin/bash
#
# ------------------------------------------------------
# Minecraft Startup Script for Unix
# ------------------------------------------------------
# minecraft This shell script takes care of the Minecraft server instance
#
# chkconfig: 2345 80 30
# description: minecraft is liquid awesome
# processname: java
DEFAULTS='/etc/default/minecraft'
PIDFILE='/var/run/minecraft/pid'
JARFILE='minecraft_server.jar'
ACTION="$1"
usage() {
echo "Usage: $0 {start|stop|restart|status}"
exit 1
}
[ $# -gt 0 ] || usage
if [[ ! -f "$DEFAULTS" ]]; then
echo "Missing defaults file $DEFAULTS"
exit -1
fi
. "$DEFAULTS"
# JVM Memory Settings
[[ -n $JVM_MAX_MEMORY ]] && JAVA_OPTS="$JAVA_OPTS -Xmx$JVM_MAX_MEMORY -XX:+UseConcMarkSweepGC -XX:+UseAdaptiveGCBoundary -XX:+CMSClassUnloadingEnabled"
RUN_CMD="java $JAVA_OPTS -cp .:* -jar $JARFILE nogui $JAVA_ARGS"
export JAVA_HOME
export MINECRAFT_HOME
export PATH
case "$ACTION" in
start)
echo "Starting $APP_NAME: "
cd $MINECRAFT_HOME
su $RUN_AS_USER -c "$RUN_CMD" >> /dev/null 2>&1 &
sleep 2
MINECRAFT_PID=`ps -u minecraft -o pid,command | grep "$APP_NAME" | awk '{print $1}'`
[[ -n $MINECRAFT_PID ]] && echo $MINECRAFT_PID > "$PIDFILE"
;;
stop)
if [[ -a "$PIDFILE" ]]; then
MINECRAFT_PID=`cat $PIDFILE`
elif [[ -n "$APP_NAME" ]]; then
MINECRAFT_PID=`ps -u minecraft -o pid,command | grep "$APP_NAME" | awk '{print $1}'`
else
echo "Cannot find PID! Need either a PID file or an APP_NAME."
exit -1
fi
ATTEMPTS=0
echo -n "Shutting down $APP_NAME: $MINECRAFT_PID"
kill $MINECRAFT_PID
while [[ -n `ps -p $MINECRAFT_PID -o comm=` ]]; do
echo -n "."
sleep 1
if [[ ++ATTEMPTS -gt 10 ]]; then
echo -n "sending SIGKILL to $MINECRAFT_PID"
kill -9 $MINECRAFT_PID
break
fi
done
echo
;;
restart)
$0 stop $*
sleep 15
$0 start $*
;;
status)
ROCKET_PS=`ps -ef | grep $APP_NAME`
if [ -n "$ROCKET_PS" ]
then
echo "$APP_NAME running"
exit 0
else
echo "$APP_NAME is currently not running."
fi
exit 1
;;
*)
usage
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment