#!/bin/bash ### BEGIN INIT INFO # Provides: craftbukkit # Required-Start: mountkernfs $local_fs $network # Required-Stop: mountkernfs $local_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Craftbukkit Minecraft Server # Description: Craftbukkit Minecraft Server ### END INIT INFO # @TODO # - Implement logging # Config START USER="craftbukkit" SRVPATH="/opt/craftbukkit" WORLDPATH="/opt/craftbukkit/world" JAVAOPTS="-d64 -server -Xms1G -Xmx4G -XX:+UseG1GC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:TargetSurvivorRatio=90 -XX:MaxGCPauseMillis=200 -XX:MaxPermSize=256m -Dlog4j.configurationFile=bukkit-log.xml" JARNAME="craftbukkit.jar" JAROPTS="--universe ${WORLDPATH}" # Config END # We want LSB functions here . /lib/lsb/init-functions server_start() { if [ -z "$(pgrep -f -n $JARNAME)" ]; then log_daemon_msg "Starting Minecraft Server" "Craftbukkit" sudo -u ${USER} tmux new-session -d -s craftbukkit-console "cd ${SRVPATH}; java ${JAVAOPTS} -jar ${JARNAME} ${JAROPTS}" >/dev/null 2>&1 sleep 1 if [ $? -gt 0 ]; then # Tmux did not start log_failure_msg exit 1 elif [ -z "$(pgrep -f -n $JARNAME)" ]; then # Tmux stared, but Java did not log_failure_msg exit 1 else log_success_msg fi else log_warning_msg "Craftbukkit is already running!" exit 1 fi } server_stop() { if [ -n "$(pgrep -f -n $JARNAME)" ]; then log_daemon_msg "Stopping Minecraft Server" "Craftbukkit" sudo -u ${USER} tmux send-keys -t craftbukkit-console "say NOTICE: Server shutting down in 5 seconds!" C-m >/dev/null 2>&1 sleep 5 sudo -u ${USER} tmux send-keys -t craftbukkit-console "save-all" C-m >/dev/null 2>&1 sleep 1 sudo -u ${USER} tmux send-keys -t craftbukkit-console "stop" C-m >/dev/null 2>&1 sleep 10 if [ -n "$(pgrep -f -n $JARNAME)" ]; then log_failure_msg exit 1 else log_success_msg fi else log_warning_msg "Craftbukkit is not running!" exit 7 fi } server_status() { if [ -n "$(pgrep -f -n $JARNAME)" ]; then log_success_msg "Craftbukkit is running" else log_failure_msg "Craftbukkit is not running!" fi } case "$1" in start) server_start ;; stop) server_stop ;; restart) server_stop server_start ;; status) server_status ;; *) log_action_msg "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0