Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # /etc/init.d/minecraft
- # version 0.3.2 2011-01-27 (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
- #Saves
- #
- # INVOCATION='java -Xms1024M -Xmx3072M -jar minecraft_server.jar'
- #Settings
- SERVICE='bukkit_server.jar'
- USERNAME="server"
- MCPATH='/srv/minecraft'
- INVOCATION='java -d64 -Xincgc -server -Xmx2048M -jar bukkit_server.jar nogui'
- BACKUPPATH='/srv/minecraft/backup'
- TIME="`date "+%Y.%m.%d-%H_%M"`"
- OLD="`date -d "1 day ago" +%Y.%m.%d`"
- RAMDISK="/dev/shm/minecraft"
- SCREENNAME="mc-bukkit_server"
- RAMDISKWORLDS="world nether"
- BACKUPWORLDS="world nether"
- ME=`whoami`
- as_user() {
- if [ "$ME" == "$USERNAME" ] ; then
- bash -c "$1"
- else
- su - $USERNAME -c "$1"
- fi
- }
- mc_start() {
- if [ ! -d $RAMDISK ]
- then
- as_user "mkdir -p $RAMDISK"
- fi
- for i in $RAMDISKWORLDS
- do
- if [ -d $RAMDISK/$i ]
- then
- continue
- else
- if [ "`ls -la $MCPATH | grep $i | awk '{print $11}'`" != "$RAMDISK/$i" ]
- then
- as_user "cd $MCPATH && rm $i"
- as_user "cd $MCPATH && ln -s $RAMDISK/$i $i"
- fi
- as_user "cd $RAMDISK && mkdir $i"
- as_user "cd $MCPATH && cp -r storage/$i/* $RAMDISK/$i"
- fi
- done
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
- then
- echo "Tried to start but $SERVICE was already running!"
- else
- echo "$SERVICE was not running... starting."
- cd $MCPATH
- as_user "cd $MCPATH && screen -dmS $SCREENNAME $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 "Could not start $SERVICE."
- fi
- fi
- }
- mc_saveoff() {
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
- then
- echo "$SERVICE is running... suspending saves"
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
- sleep 3
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"save-off\"\015'"
- sleep 2
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"save-all\"\015'"
- sync
- sleep 10
- else
- echo "$SERVICE was not running. Not suspending saves."
- fi
- }
- mc_saveon() {
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
- then
- echo "$SERVICE is running... re-enabling saves"
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"save-on\"\015'"
- sleep 1
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
- else
- echo "$SERVICE was not running. Not resuming saves."
- fi
- }
- mc_stop() {
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
- then
- echo "$SERVICE is running... stopping."
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
- as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"save-all\"\015'"
- sleep 10
- as_user "screen -p 0 -S $SCREENNAME -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 "$SERVICE could not be shut down... still running."
- else
- echo "$SERVICE is shut down."
- if [ ! -d $MCPATH/storage ] ; then as_user "cd $MCPATH && mkdir storage" ; fi
- echo "Dumping Minecraft Ramdisk..."
- for i in $RAMDISKWORLDS
- do
- as_user "cd $MCPATH && rm -r storage/$i"
- as_user "cd $MCPATH && mkdir storage/$i"
- as_user "cd $RAMDISK && cp -r $i/* $MCPATH/storage/$i"
- done
- echo "Dump complete"
- fi
- }
- mc_backup() {
- if [ ! -d $BACKUPPATH ] ; then as_user "mkdir -p $BACKUPPATH" ; fi
- for i in $BACKUPWORLDS
- do
- if [ ! -d $BACKUPPATH/$i ]
- then
- as_user "cd $BACKUPPATH && mkdir $i"
- fi
- echo "Backing up minecraft world - $i"
- as_user "cd $MCPATH/$i && tar cfz $BACKUPPATH/$i/$TIME.tar.gz *"
- done
- echo "Backup complete"
- }
- mc_delete() {
- echo "Deleting old backups"
- for i in $BACKUPWORLDS
- do
- as_user "cd $BACKUPPATH/$i && rm -r $OLD*"
- done
- echo "Backups deleted"
- }
- mc_logins() {
- echo "Creating log for connections"
- as_user "cd $MCPATH && cat server.log | grep -E \"logged|Disconnecting|disconnect\" > logins.log"
- echo "Log created"
- }
- case "$1" in
- start)
- mc_start
- ;;
- stop)
- mc_stop
- ;;
- restart)
- mc_stop
- mc_start
- ;;
- logins)
- mc_logins
- ;;
- backup)
- mc_saveoff
- mc_backup
- mc_saveon
- ;;
- delete)
- mc_delete
- ;;
- 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
- ;;
- *)
- echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart|logins}"
- exit 1
- ;;
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement