master
Raw Download raw file
  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='craftbukkit-beta.jar'
 19USERNAME="minecraft"
 20MCSTORE='/home/minecraft/bukkit'
 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