Skip to content

Commit

Permalink
Added init script
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Fitzgerald committed Nov 18, 2012
1 parent 075f36e commit c4d1c12
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 4 deletions.
6 changes: 6 additions & 0 deletions attributes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
default['minecraft']['install_dir'] = '/srv/minecraft'
default['minecraft']['base_url'] = 'https://s3.amazonaws.com/MinecraftDownload/launcher'
default['minecraft']['jar'] = 'minecraft_server.jar'
default['minecraft']['checksum'] = '7a1abdac5d412b7eebefd84030d40c1591c17325801dba9cbbeb3fdf3c374553'

default['minecraft']['xms'] = '1024M'
default['minecraft']['xmx'] = '1024M'
default['minecraft']['ipv6'] = false
default['minecraft']['pid'] = '/var/run/minecraft.pid'

default['minecraft']['banned-ips'] = []
default['minecraft']['banned-players'] = []
Expand Down
21 changes: 17 additions & 4 deletions recipes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,25 +24,26 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#

# Only focusing on Linux and BSD suppport. Patches are welcome for OSX and Windows.

include_recipe 'java::default'
include_recipe 'tmux::default'

minecraft_jar = "#{Chef::Config['file_cache_path']}/#{node['minecraft']['jar']}"

user node['minecraft']['user'] do
system true
shell "/bin/false"
comment "Minecraft Server"
home node['minecraft']['install_dir']
shell "/bin/false"
action :create
end

remote_file minecraft_jar do
source "#{node['minecraft']['base_url']}/#{node['minecraft']['jar']}"
checksum node['minecraft']['checksum']
owner node['minecraft']['user']
group node['minecraft']['user']
mode '0644'
not_if { File.exists?(minecraft_jar) }
action :create_if_missing
end

directory node['minecraft']['install_dir'] do
Expand All @@ -69,3 +70,15 @@
action :create
end
end

template "/etc/init.d/minecraft" do
source "minecraft.init.erb"
owner "root"
group "root"
mode 00755
end

service "minecraft" do
supports :restart => true
action [ :enable, :start ]
end
106 changes: 106 additions & 0 deletions templates/default/minecraft.init.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: Minecraft server
# 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

# Author: Greg Fitzgerald <[email protected]>

# Settings
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
USER="<%= node['minecraft']['user'] %>"
SOCKET="/tmp/tmux-minecraft"
MCJAR="<%= node['minecraft']['jar'] %>"
XMS="<%= node['minecraft']['xms'] %>"
XMX="<%= node['minecraft']['xmx'] %>"
PIDFILE="<%= node['minecraft']['pid'] %>"
HOME="<%= node['minecraft']['install_dir'] %>"
NAME="Minecraft Server"
SHUTDOWN_DELAY="30"

[ -e $HOME/$MCJAR ] || exit 0

set -e

. /lib/lsb/init-functions

isrunning() {
ps ax | grep -Ev "tmux|sh|grep" | grep $MCJAR > /dev/null
return $?
}

start() {
if [ !isrunning ]; then
start-stop-daemon \
--oknodo \
--start \
--make-pidfile \
--pidfile $PIDFILE \
--chdir $HOME \
--chuid $USER \
--exec /usr/bin/tmux -- -S $SOCKET new-session -n minecraft -d "java -server -Xincgc -Xms$XMS -Xmx$XMX -Djava.net.preferIPv4Stack=true -jar $MCJAR nogui"
fi
}

stop() {
if isrunning; then
tmux -S $SOCKET -q send "say Server going down in $SHUTDOWN_DELAY seconds" C-m > /dev/null
sleep $SHUTDOWN_DELAY
tmux -S $SOCKET -q send "stop" C-m > /dev/null
fi

sleep 5

if isrunning; then
echo "$NAME failed to stop, trying to force a shutdown"
minecraftPID=`ps ax | grep -Ev "grep|tmux|sh" $MCJAR`
kill ${minecraftPID:0:5}
fi

sleep 2

if isrunning; then
echo "Was unable to kill $NAME"
else
echo "Sucessfully killed $NAME"
fi
}

case "$1" in
start)
echo -n "Starting $NAME: "
start
echo "$NAME."
;;
stop)
echo -n "Stopping $NAME: "
stop
echo "$NAME."
;;
restart)
echo -n "Restarting $NAME: "
stop
echo "$NAME."
start
;;
status)
if isrunning; then
echo "$NAME is running"
exit 0
else
echo "$NAME is not running"
exit 1
fi
;;
*)
echo "Usage: $NAME {start|stop|restart|status}" >&2
exit 1
;;
esac

0 comments on commit c4d1c12

Please sign in to comment.