Created
October 16, 2011 01:59
-
-
Save Phrogz/1290420 to your computer and use it in GitHub Desktop.
Minecraft service for Ubuntu (/etc/init.d/minecraft)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# /etc/init.d/minecraft | |
# version 0.3.4 2011-06-12 (YYYY-MM-DD) | |
### BEGIN INIT INFO | |
# Provides: minecraft | |
# Required-Start: $local_fs $remote_fs | |
# Required-Stop: $local_fs $remote_fs | |
# Should-Start: $network | |
# Should-Stop: $network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Minecraft server | |
# Description: Starts the minecraft server | |
### END INIT INFO | |
#Settings | |
SERVICE='minecraft_server.jar' | |
OPTIONS='nogui' | |
USERNAME='minecraft' | |
WORLD='Snow2' | |
MCPATH='/home/minecraft/data' | |
CPU_COUNT=1 | |
INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE $OPTIONS" | |
ME=`whoami` | |
as_user() { | |
if [ $ME == $USERNAME ] ; then | |
bash -c "$1" | |
else | |
su - $USERNAME -c "$1" | |
fi | |
} | |
mc_start() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "$SERVICE is already running!" | |
else | |
echo "Starting $SERVICE..." | |
cd $MCPATH | |
as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION" | |
sleep 7 | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "$SERVICE is now running." | |
else | |
echo "Error! Could not start $SERVICE!" | |
fi | |
fi | |
} | |
mc_stop() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "Stopping $SERVICE" | |
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'" | |
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'" | |
sleep 10 | |
as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'" | |
sleep 7 | |
else | |
echo "$SERVICE was not running." | |
fi | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "Error! $SERVICE could not be stopped." | |
else | |
echo "$SERVICE is stopped." | |
fi | |
} | |
mc_update() { | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "$SERVICE is running! Will not start update." | |
else | |
MC_SERVER_URL=http://www.minecraft.net/download/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"` | |
as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL" | |
if [ -f $MCPATH/minecraft_server.jar.update ] | |
then | |
if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null` | |
then | |
echo "You are already running the latest version of $SERVICE." | |
else | |
as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE" | |
echo "Minecraft successfully updated." | |
fi | |
else | |
echo "Minecraft update could not be downloaded." | |
fi | |
fi | |
} | |
mc_command() { | |
if [ "$1" ] | |
then | |
command="$1"; | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "$SERVICE is running... executing command" | |
as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'" | |
fi | |
else | |
echo "Must specify server command" | |
fi | |
} | |
#Start-Stop here | |
case "$1" in | |
start) | |
mc_start | |
;; | |
stop) | |
mc_stop | |
;; | |
restart) | |
mc_stop | |
mc_start | |
;; | |
update) | |
mc_stop | |
mc_update | |
mc_start | |
;; | |
status) | |
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null | |
then | |
echo "$SERVICE is running." | |
else | |
echo "$SERVICE is not running." | |
fi | |
;; | |
command) | |
mc_command "$2" | |
;; | |
*) | |
echo "Usage: /etc/init.d/minecraft {start|stop|update|status|restart|command \"server command\"}" | |
exit 1 | |
;; | |
esac | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
still works great!