Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- SERVERS="bungee lobby normal easy creative arena hungergames"
- RAMDISK="/home/xxxx/mcramdisk"
- DISK="/home/xxxx/mcdisk"
- USERNAME="xxxx"
- BACKUP_DIR="/home/xxxx/backup/minecraft_backups"
- DROPBOX_DIR="/home/xxxx/Dropbox/Minecraft_Backups"
- LOGS_DIR="/home/xxxx/logs"
- MAX_BACKUPS=120
- MAX_DROPBOX=2
- ME=`whoami`
- as_user() {
- if [ "$ME" == "$USERNAME" ]; then
- bash -c "$1"
- else
- su - $USERNAME -c "$1"
- fi
- }
- send_to_console(){
- as_user "screen -p 0 -S $1 -X eval 'stuff \"$2\"\015'"
- }
- get_server() {
- SERVER="NULL"
- if [ "$1" == "all" ]; then
- SERVER="all"
- else
- for i in $SERVERS
- do
- if [ "$1" == "$i" ]; then
- SERVER="$1"
- break
- else
- continue
- fi
- done
- fi
- }
- cycle_logs() {
- for i in $SERVERS
- do
- if [ "$i" == "bungee" ]; then
- as_user "mv $RAMDISK/$i/proxy.log.0 $LOGS_DIR/$i_log_`date "+%m.%d.%y-%s"`.log"
- else
- as_user "mv $RAMDISK/$i/server.log $LOGS_DIR/$i_log_`date "+%m.%d.%y-%s"`.log"
- fi
- done
- }
- get_status() {
- for i in $SERVERS
- do
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
- then
- echo -e "$i:"'\E[32;407m'" UP"
- tput sgr0
- else
- echo -e "$i:"'\E[31;407m'" DOWN"
- tput sgr0
- fi
- done
- }
- server_start() {
- get_server "$1"
- if [ "$SERVER" == "NULL" ]; then
- echo "Syntax: minecraft start {servername|all}"
- echo "Available servernames: $SERVERS"
- exit 1
- fi
- if [ "$SERVER" == "all" ]; then
- QUEUE="$SERVERS"
- else
- QUEUE="$SERVER"
- fi
- for i in $QUEUE
- do
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
- then
- echo "$i.jar is already running."
- else
- echo "Starting $i..."
- if [ ! -f "$RAMDISK/bungee/bungee.jar" ]
- then
- echo "Ramdisk empty, loading..."
- as_user "cp -r $DISK/CurrentSave/* $RAMDISK"
- fi
- as_user "$RAMDISK/$i/$i.sh"
- sleep 4
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
- then
- echo " $i is now UP."
- else
- echo " Could not start $i..."
- fi
- fi
- done
- }
- server_stop() {
- get_server "$1"
- if [ "$SERVER" == "NULL" ]; then
- echo "Syntax: minecraft stop {servername|all}"
- echo "Available servernames: $SERVERS"
- exit 1
- fi
- if [ "$SERVER" == "all" ]; then
- QUEUE="$SERVERS"
- else
- QUEUE="$SERVER"
- fi
- for i in $QUEUE
- do
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
- then
- echo "Stopping $i..."
- if [ "$i" == bungee ]; then
- send_to_console "$i" "end"
- else
- send_to_console "$i" "save-all"
- sleep 3
- send_to_console "$i" "stop"
- sleep 3
- fi
- else
- echo "$i is not running."
- continue
- fi
- ## Checks to see if the server was shut down. If not checks again every 5 seconds for 50 seconds before giving up
- for j in 1 2 3 4 5 6 7 8 9 10
- do
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
- then
- if [ "$j" == "10" ]; then
- echo "Could not stop $i. Aborting."
- continue
- fi
- echo "$i is still running. Waiting 5 more seconds..."
- sleep 5
- continue
- else
- echo "$i has been shut down. "
- fi
- break
- done
- done
- if [ "$SERVER" == "all" ]; then
- cycle_logs
- fi
- }
- save_to_disk() {
- #make sure that there's something in the ramdisk
- if [ ! -f $RAMDISK/bungee/bungee.jar ]
- then
- echo "The ramdisk is empty. Nothing to do."
- else
- #for each running server, do save-off and save-all
- for i in $SERVERS
- do
- if [ $i == "bungee" ]; then
- continue
- fi
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i > /dev/null
- then
- if [ "$i" != "bungee" ]; then
- send_to_console "$i" "save-off"
- send_to_console "$i" "save-all"
- fi
- fi
- done
- sleep 2
- #clean up if the last save didn't finish for some reason
- if [ -d $DISK/LastSave ]
- then
- as_user "ionice -c 3 rm -r $DISK/LastSave"
- fi
- #keep the most recent save unless something goes wrong
- if [ -d $DISK/CurrentSave ]
- then
- as_user "ionice -c 3 mv $DISK/CurrentSave $DISK/LastSave"
- fi
- #copy everything from the ramdisk
- as_user "mkdir $DISK/CurrentSave && ionice -c 3 cp -R $RAMDISK/* $DISK/CurrentSave/"
- if [ -f $DISK/CurrentSave/bungee/bungee.jar ]
- then
- #everything went well, so get rid of the last save
- if [ -d $DISK/LastSave ]
- then
- as_user "ionice -c 3 rm -r $DISK/LastSave"
- fi
- fi
- #do a save-on for each server that is running
- for i in $SERVERS
- do
- if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
- then
- if [ "$i" != "bungee" ]; then
- send_to_console "$i" "save-on"
- fi
- fi
- done
- echo "Save Complete."
- fi
- }
- server_backup() {
- echo "Running backup..."
- if [ -f $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
- then
- 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
- do
- if [ -f $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
- then
- continue
- else
- as_user "cd $DISK/CurrentSave && ionice -c 3 tar chzf $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz *"
- if test `ls -t1 $BACKUP_DIR | wc -l` -gt $MAX_BACKUPS;
- then
- echo "There are more than $MAX_BACKUPS backups in $BACKUP_DIR. Deleting the oldest."
- as_user "ionice -c 3 rm $BACKUP_DIR/`ls -t1 $BACKUP_DIR | tail -n1`"
- fi
- break
- fi
- done
- else
- as_user "cd $DISK/CurrentSave && ionice -c 3 tar chzf $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`.tar.gz *"
- echo "Saving daily backup to storage and Dropbox..."
- #as_user "ionice -c 3 cp $BACKUP_DIR/`ls -t1 $BACKUP_DIR | head -n1` $BACKUP_DIR2"
- as_user "ionice -c 3 cp $BACKUP_DIR/`ls -t1 $BACKUP_DIR | head -n1` $DROPBOX_DIR"
- if test `ls -t1 $BACKUP_DIR | wc -l` -gt $MAX_BACKUPS;
- then
- echo "There are more than $MAX_BACKUP backups in $BACKUP_DIR. Deleting the oldest."
- as_user "ionice -c 3 rm $BACKUP_DIR/`ls -t1 $BACKUP_DIR | tail -n1`"
- fi
- if test `ls -t1 $DROPBOX_DIR | wc -l` -gt $MAX_DROPBOX;
- then
- echo "There are more than $MAX_DROPBOX backups in $DROPBOX_DIR. Deleting the oldest."
- as_user "ionice -c 3 rm $DROPBOX_DIR/`ls -t1 $DROPBOX_DIR | tail -n1`"
- fi
- fi
- echo "Backup complete."
- }
- case "$1" in
- start)
- server_start "$2"
- ;;
- stop)
- server_stop "$2"
- ;;
- restart)
- server_stop "$2"
- server_start "$2"
- ;;
- backup)
- save_to_disk
- server_backup
- ;;
- save)
- save_to_disk
- ;;
- status)
- get_status
- ;;
- console)
- send_to_console "$2" "$3"
- ;;
- *)
- echo "Syntax: minecraft {start|stop|restart|backup|save|console|status}"
- exit 1
- ;;
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement