master
1#!/bin/bash
2# /etc/init.d/minecraft
3# version 0.5 2011-09-24 (YYYY-MM-DD)
4
5### BEGIN INIT INFO
6# Provides: minecraft
7# Required-Start: $local_fs $remote_fs
8# Required-Stop: $local_fs $remote_fs
9# Should-Start: $network
10# Should-Stop: $network
11# Default-Start: 2 3 4 5
12# Default-Stop: 0 1 6
13# Short-Description: Minecraft server
14# Description: Starts the minecraft server
15### END INIT INFO
16
17#Settings
18SERVICE='minecraft_server.jar'
19USERNAME="minecraft"
20MCSTORE='/home/minecraft/mc'
21MCPATH='/home/minecraft/mc_ram'
22CPU_COUNT=2
23INVOCATION="java -Xmx2048M -Xms2048M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE nogui"
24BACKUPPATH='/home/minecraft/mc_backups/'
25MAPSERVICE='/home/minecraft/mc_map/Minecraft-Overviewer/overviewer.py'
26MAPCONFIG='/home/minecraft/mc_admin/ov.conf'
27MAPLOCK='/var/lock/mapper.lock'
28
29ME=`whoami`
30as_user() {
31 if [ "$ME" == "$USERNAME" ] ; then
32 bash -c "$1"
33 else
34 su - $USERNAME -c "$1"
35 fi
36}
37
38mc_start() {
39 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
40 then
41 echo "Tried to start but $SERVICE was already running!"
42 else
43 echo "$SERVICE was not running... starting."
44 cd $MCPATH
45 if [ ! -f "$MCPATH/minecraft_server.jar" ]
46 then
47 echo "Ram drive empty... prepping."
48 as_user "cp -R $MCSTORE/* $MCPATH/"
49 fi
50 as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
51 sleep 7
52 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
53 then
54 echo "$SERVICE is now running."
55 else
56 echo "Could not start $SERVICE."
57 fi
58 fi
59}
60
61mc_saveoff() {
62 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
63 then
64 echo "$SERVICE is running... suspending saves"
65 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
66 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
67 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
68 sync
69 sleep 10
70 else
71 echo "$SERVICE was not running. Not suspending saves."
72 fi
73}
74
75mc_saveon() {
76 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
77 then
78 echo "$SERVICE is running... re-enabling saves"
79 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
80 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
81 else
82 echo "$SERVICE was not running. Not resuming saves."
83 fi
84}
85
86mc_stop() {
87 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
88 then
89 echo "$SERVICE is running... stopping."
90 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 5 SECONDS. Saving map...\"\015'"
91 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
92 sleep 5
93 as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
94 sleep 5
95 else
96 echo "$SERVICE was not running."
97 fi
98 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
99 then
100 echo "$SERVICE could not be shut down... still running."
101 else
102 echo "$SERVICE is shut down."
103 fi
104}
105
106
107mc_update() {
108 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
109 then
110 echo "$SERVICE is running! Will not start update."
111 else
112 MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\</a\> | cut -d \" -f 2`
113 as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
114 if [ -f $MCPATH/minecraft_server.jar.update ]
115 then
116 if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
117 then
118 echo "You are already running the latest version of $SERVICE."
119 else
120 as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
121 echo "Minecraft successfully updated."
122 fi
123 else
124 echo "Minecraft update could not be downloaded."
125 fi
126 fi
127}
128
129mc_backup() {
130 echo "Backing up minecraft files"
131 if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
132 then
133 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
134 do
135 if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
136 then
137 continue
138 else
139 as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ."
140 break
141 fi
142 done
143 else
144 as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ."
145 fi
146 echo "Backup complete"
147}
148
149mc_disksaverun() {
150
151 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
152 then
153 echo "Saving ramdrive to disk."
154 if [ ! -f $MCPATH/$SERVICE ]
155 then
156 echo "Error.. Minecraft not in ram"
157 else
158 if [ -d $MCSTORE/world2 ]
159 then
160 as_user "rm -r $MCSTORE/world2"
161 fi
162 if [ -d $MCSTORE/world ]
163 then
164 as_user "mv $MCSTORE/world $MCSTORE/world2"
165 fi
166
167 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
168 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
169 as_user "cp -R $MCPATH/* $MCSTORE/"
170 as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
171
172 if [ -d $MCSTORE/world2 ]
173 then
174 as_user "rm -r $MCSTORE/world2"
175 fi
176 fi
177 else
178 echo "Service is not running"
179 fi
180
181}
182
183mc_disksavehalt() {
184 echo "Saving ramdrive to disk."
185 if [ ! -f $MCPATH/minecraft_server.jar ]
186 then
187 echo "Error.. Minecraft not in ram"
188 else
189 if [ -d $MCSTORE/world2 ]
190 then
191 as_user "rm -r $MCSTORE/world2"
192 fi
193 if [ -d $MCSTORE/world ]
194 then
195 as_user "mv $MCSTORE/world $MCSTORE/world2"
196 fi
197
198 echo "Saving, screen session closed"
199 as_user "cp -R $MCPATH/* $MCSTORE/"
200
201 if [ -d $MCSTORE/world2 ]
202 then
203 as_user "rm -r $MCSTORE/world2"
204 fi
205 fi
206
207}
208
209mc_mapper() {
210 if mkdir $MAPLOCK
211 then
212 echo "$SERVICE is running... Mapping Engage"
213 as_user "python $MAPSERVICE --config=$MAPCONFIG"
214 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Map update complete!\"\015'"
215 rmdir $MAPLOCK
216 else
217 echo "$MAPLOCK exists. Not mapping."
218 fi
219}
220
221mumblead() {
222 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
223 then
224 echo "$SERVICE is running... telling the users"
225 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Extra Minecraft Services\"\015'"
226 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Map at http://sip.alta3.com:50000\"\015'"
227 as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Mumble Voice Chat at sip.alta3.com (Port 64738)\"\015'"
228 else
229 echo "$SERVICE was not running. Not soapboxing."
230 fi
231}
232
233#Start-Stop here
234case "$1" in
235 start)
236 mc_start
237 ;;
238 stop)
239 mc_stop
240 mc_disksavehalt
241 ;;
242 restart)
243 mc_stop
244 mc_disksavehalt
245 mc_start
246 ;;
247 update)
248 mc_stop
249 mc_backup
250 mc_update
251 mc_start
252 ;;
253 backup)
254 mc_disksaverun
255 mc_saveoff
256 mc_backup
257 mc_saveon
258 ;;
259 disksavehalt)
260 mc_disksavehalt
261 ;;
262 disksaverun)
263 mc_disksaverun
264 ;;
265 mapper)
266 disksaverun
267 mc_mapper
268 ;;
269 mumblead)
270 mumblead
271 ;;
272 status)
273 if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
274 then
275 echo "$SERVICE is running."
276 else
277 echo "$SERVICE is not running."
278 fi
279 ;;
280
281 *)
282 echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart|disksaverun|mapper|mumblead}"
283 exit 1
284 ;;
285esac
286
287exit 0
288