Advertisement
Guest User

Untitled

a guest
Jul 8th, 2013
568
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.03 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. SERVERS="bungee lobby normal easy creative arena hungergames"
  4. RAMDISK="/home/xxxx/mcramdisk"
  5. DISK="/home/xxxx/mcdisk"
  6. USERNAME="xxxx"
  7. BACKUP_DIR="/home/xxxx/backup/minecraft_backups"
  8. DROPBOX_DIR="/home/xxxx/Dropbox/Minecraft_Backups"
  9. LOGS_DIR="/home/xxxx/logs"
  10. MAX_BACKUPS=120
  11. MAX_DROPBOX=2
  12.  
  13. ME=`whoami`
  14. as_user() {
  15.   if [ "$ME" == "$USERNAME" ]; then
  16.     bash -c "$1"
  17.   else
  18.     su - $USERNAME -c "$1"
  19.   fi
  20. }
  21.  
  22. send_to_console(){
  23.     as_user "screen -p 0 -S $1 -X eval 'stuff \"$2\"\015'"
  24. }
  25.  
  26. get_server() {
  27.  
  28.   SERVER="NULL"
  29.   if [ "$1" == "all" ]; then
  30.     SERVER="all"
  31.   else
  32.  
  33.     for i in $SERVERS
  34.     do
  35.       if [ "$1" == "$i" ]; then
  36.         SERVER="$1"
  37.         break
  38.       else
  39.         continue
  40.       fi
  41.     done
  42.  
  43.   fi
  44. }
  45.  
  46. cycle_logs() {
  47.   for i in $SERVERS
  48.   do
  49.     if [ "$i" == "bungee" ]; then
  50.       as_user "mv $RAMDISK/$i/proxy.log.0 $LOGS_DIR/$i_log_`date "+%m.%d.%y-%s"`.log"
  51.     else
  52.       as_user "mv $RAMDISK/$i/server.log $LOGS_DIR/$i_log_`date "+%m.%d.%y-%s"`.log"
  53.     fi
  54.   done
  55. }
  56.  
  57. get_status() {
  58.   for i in $SERVERS
  59.   do
  60.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
  61.     then
  62.       echo -e "$i:"'\E[32;407m'" UP"
  63.       tput sgr0
  64.     else
  65.       echo -e "$i:"'\E[31;407m'" DOWN"
  66.       tput sgr0
  67.     fi
  68.   done
  69. }
  70.  
  71. server_start() {
  72.   get_server "$1"
  73.  
  74.   if [ "$SERVER" == "NULL" ]; then
  75.     echo "Syntax: minecraft start {servername|all}"
  76.     echo "Available servernames: $SERVERS"
  77.     exit 1
  78.   fi
  79.  
  80.   if [ "$SERVER" == "all" ]; then
  81.     QUEUE="$SERVERS"
  82.   else
  83.     QUEUE="$SERVER"
  84.   fi
  85.  
  86.   for i in $QUEUE
  87.   do
  88.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
  89.     then
  90.       echo "$i.jar is already running."
  91.     else
  92.       echo "Starting $i..."
  93.       if [ ! -f "$RAMDISK/bungee/bungee.jar" ]
  94.       then
  95.         echo "Ramdisk empty, loading..."
  96.         as_user "cp -r $DISK/CurrentSave/* $RAMDISK"
  97.       fi
  98.  
  99.       as_user "$RAMDISK/$i/$i.sh"
  100.       sleep 4
  101.       if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
  102.         then
  103.           echo "  $i is now UP."
  104.         else
  105.           echo "  Could not start $i..."
  106.       fi
  107.     fi
  108.   done
  109. }
  110.  
  111. server_stop() {
  112.   get_server "$1"
  113.  
  114.   if [ "$SERVER" == "NULL" ]; then
  115.     echo "Syntax: minecraft stop {servername|all}"
  116.     echo "Available servernames: $SERVERS"
  117.     exit 1
  118.   fi
  119.  
  120.   if [ "$SERVER" == "all" ]; then
  121.     QUEUE="$SERVERS"
  122.   else
  123.     QUEUE="$SERVER"
  124.   fi
  125.  
  126.   for i in $QUEUE
  127.   do
  128.     if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
  129.     then
  130.       echo "Stopping $i..."
  131.       if [ "$i" == bungee ]; then
  132.         send_to_console "$i" "end"
  133.       else
  134.         send_to_console "$i" "save-all"
  135.         sleep 3
  136.         send_to_console "$i" "stop"
  137.         sleep 3
  138.       fi
  139.     else
  140.       echo "$i is not running."
  141.       continue
  142.     fi
  143.  
  144. ## Checks to see if the server was shut down. If not checks again every 5 seconds for 50 seconds before giving up
  145.     for j in 1 2 3 4 5 6 7 8 9 10
  146.     do
  147.       if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
  148.       then
  149.         if [ "$j" == "10" ]; then
  150.           echo "Could not stop $i. Aborting."
  151.           continue
  152.         fi
  153.         echo "$i is still running. Waiting 5 more seconds..."
  154.         sleep 5
  155.         continue
  156.       else
  157.         echo "$i has been shut down. "
  158.       fi
  159.       break
  160.     done
  161.   done
  162.  
  163.   if [ "$SERVER" == "all" ]; then
  164.     cycle_logs
  165.   fi
  166. }
  167.  
  168. save_to_disk() {
  169.   #make sure that there's something in the ramdisk
  170.   if [ ! -f $RAMDISK/bungee/bungee.jar ]
  171.   then
  172.     echo "The ramdisk is empty. Nothing to do."
  173.   else
  174.     #for each running server, do save-off and save-all
  175.     for i in $SERVERS
  176.     do
  177.       if [ $i == "bungee" ]; then
  178.        continue
  179.       fi
  180.  
  181.       if ps ax | grep -v grep | grep -v -i SCREEN | grep $i > /dev/null
  182.       then
  183.         if [ "$i" != "bungee" ]; then
  184.         send_to_console "$i" "save-off"
  185.         send_to_console "$i" "save-all"
  186.         fi
  187.       fi
  188.     done
  189.     sleep 2
  190.     #clean up if the last save didn't finish for some reason
  191.     if [ -d $DISK/LastSave ]
  192.     then
  193.       as_user "ionice -c 3 rm -r $DISK/LastSave"
  194.     fi
  195.     #keep the most recent save unless something goes wrong
  196.     if [ -d $DISK/CurrentSave ]
  197.     then
  198.       as_user "ionice -c 3 mv $DISK/CurrentSave $DISK/LastSave"
  199.     fi
  200.     #copy everything from the ramdisk
  201.     as_user "mkdir $DISK/CurrentSave && ionice -c 3 cp -R $RAMDISK/* $DISK/CurrentSave/"
  202.     if [ -f $DISK/CurrentSave/bungee/bungee.jar ]
  203.     then
  204.     #everything went well, so get rid of the last save
  205.       if [ -d $DISK/LastSave ]
  206.       then
  207.         as_user "ionice -c 3 rm -r $DISK/LastSave"
  208.       fi
  209.     fi
  210.     #do a save-on for each server that is running
  211.     for i in $SERVERS
  212.     do
  213.       if ps ax | grep -v grep | grep -v -i SCREEN | grep $i.jar > /dev/null
  214.       then
  215.         if [ "$i" != "bungee" ]; then
  216.         send_to_console "$i" "save-on"
  217.         fi
  218.       fi
  219.     done
  220.   echo "Save Complete."
  221.   fi
  222. }
  223.  
  224. server_backup() {
  225.   echo "Running backup..."
  226.  
  227.   if [ -f $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
  228.   then
  229.  
  230.     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
  231.     do
  232.       if [ -f $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
  233.       then
  234.         continue
  235.       else
  236.         as_user "cd $DISK/CurrentSave && ionice -c 3 tar chzf $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz *"
  237.       if test `ls -t1 $BACKUP_DIR | wc -l` -gt $MAX_BACKUPS;
  238.       then
  239.         echo "There are more than $MAX_BACKUPS backups in $BACKUP_DIR. Deleting the oldest."
  240.         as_user "ionice -c 3 rm $BACKUP_DIR/`ls -t1 $BACKUP_DIR | tail -n1`"
  241.       fi
  242.         break
  243.       fi
  244.     done
  245.  
  246.   else
  247.     as_user "cd $DISK/CurrentSave && ionice -c 3 tar chzf $BACKUP_DIR/MCBKUP_`date "+%Y.%m.%d"`.tar.gz *"
  248.     echo "Saving daily backup to storage and Dropbox..."
  249.     #as_user "ionice -c 3 cp $BACKUP_DIR/`ls -t1 $BACKUP_DIR | head -n1` $BACKUP_DIR2"
  250.     as_user "ionice -c 3 cp $BACKUP_DIR/`ls -t1 $BACKUP_DIR | head -n1` $DROPBOX_DIR"
  251.     if test `ls -t1 $BACKUP_DIR | wc -l` -gt $MAX_BACKUPS;
  252.     then
  253.       echo "There are more than $MAX_BACKUP backups in $BACKUP_DIR. Deleting the oldest."
  254.       as_user "ionice -c 3 rm $BACKUP_DIR/`ls -t1 $BACKUP_DIR | tail -n1`"
  255.     fi
  256.     if test `ls -t1 $DROPBOX_DIR | wc -l` -gt $MAX_DROPBOX;
  257.     then
  258.       echo "There are more than $MAX_DROPBOX backups in $DROPBOX_DIR. Deleting the oldest."
  259.       as_user "ionice -c 3 rm $DROPBOX_DIR/`ls -t1 $DROPBOX_DIR | tail -n1`"
  260.     fi
  261.   fi
  262.   echo "Backup complete."
  263. }
  264.  
  265.  
  266. case "$1" in
  267.   start)
  268.     server_start "$2"
  269.     ;;
  270.   stop)
  271.     server_stop "$2"
  272.     ;;
  273.   restart)
  274.     server_stop "$2"
  275.     server_start "$2"
  276.     ;;
  277.   backup)
  278.     save_to_disk
  279.     server_backup
  280.     ;;
  281.   save)
  282.     save_to_disk
  283.     ;;
  284.   status)
  285.     get_status
  286.     ;;
  287.   console)
  288.     send_to_console "$2" "$3"
  289.     ;;
  290.   *)
  291.   echo "Syntax: minecraft {start|stop|restart|backup|save|console|status}"
  292.   exit 1
  293.   ;;
  294. esac
  295.  
  296. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement