#!/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 # 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_running() { if [ -z "$(pgrep -f -n $JARNAME)" ]; then return 1 else return 0 fi } server_start() { if ! server_running; 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 if [ $? -gt 0 ]; then # Tmux did not start log_failure_msg exit 1 elif sleep 1 && ! server_running; then # Tmux started, but Java did not logger -t craftbukkit -p local0.crit "Craftbukkit start failed" log_failure_msg exit 1 else logger -t craftbukkit -p local0.info "Craftbukkit minecraft server started" log_success_msg fi else log_warning_msg "Craftbukkit is already running!" exit 1 fi } server_stop() { if server_running; 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 server_running; then logger -t craftbukkit -p local0.crit "Craftbukkit shutdown failed" log_failure_msg exit 1 else logger -t craftbukkit -p local0.info "Craftbukkit minecraft server stopped" log_success_msg fi else log_warning_msg "Craftbukkit is not running!" exit 7 fi } case "$1" in start) server_start ;; stop) server_stop ;; restart) server_stop server_start ;; status) if server_running; then log_success_msg "Craftbukkit is running" else log_failure_msg "Craftbukkit is not running!" exit 1 fi ;; *) log_action_msg "Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0