Advertisement
ehansen

Untitled

May 16th, 2012
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.88 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. DAY=`date +%d`
  4.  
  5. MONTH=`date +%m`
  6.  
  7. YEAR=`date +%Y`
  8.  
  9. # Backup directory to use (2011/08/31 for 08.31.2011)
  10. BKDIR="/backups/$YEAR/$MONTH/$DAY"
  11.  
  12. if [ ! -d "$BKDIR" ]; then
  13.         mkdir -p $BKDIR
  14. fi
  15.  
  16. BKLOG="/backups/$YEAR/$MONTH/$DAY.log"
  17.  
  18. ARRPOS=0
  19.  
  20. DRIVE=('sda' 'sdb')
  21.  
  22. # What to back up on each drive?
  23. BACKUP=('/' '/pub')
  24.  
  25. # Exclude these from / (sda)
  26. SDAEX=('/media' '/tmp' '/dev' '/proc' '/sys' '/mnt' '/pub' '/var/cache' '/backups')
  27.  
  28. touch $BKLOG
  29.  
  30. echo "To: someone@somewhere.com" > $BKLOG
  31. echo "From:Backups <backups@secrets>" >> $BKLOG
  32. echo -e "Subject: Generated backup report for `hostname` on $YEAR.$MONTH.$DAY\n" >> $BKLOG
  33.  
  34. echo -e ">> Backup for: $YEAR.$MONTH.$DAY started @ `date +%H:%M:%S`\n" >> $BKLOG
  35.  
  36. # Checks to see if day = 1, and if so, backs up the last month's backups
  37. if [ "$DAY" == "01" ]; then
  38.         M=`echo -n $MONTH | awk '{printf substr($1,2)}'`
  39.         let OLD=M-1
  40.  
  41.         echo "- New month detected.  Backing up previous month's ($OLD) backups." >> $BKLOG
  42.         echo "   + Backup file: /backups/$YEAR/$OLD.tar.gz" >> $BKLOG
  43.         SD=$( { time tar -cpPzf /backups/$YEAR/$OLD.tar.gz /backups/$YEAR/$OLD/; } 2>&1 )
  44.  
  45.         # Got stats, delete folder
  46.         rm -rf /backups/$YEAR/$OLD
  47.  
  48.         SD=`echo -n "$SD" | grep real`
  49.         MIN=`echo -n "$SD" | awk '{printf substr($2,0,2)}'`
  50.         SEC=`echo -n "$SD" | awk '{printf substr($2,3)}'`
  51.         echo -e "- done [ $MIN $SEC ].\n" >> $BKLOG
  52. fi
  53.  
  54. tar -cpPzf /backups/$YEAR/$OLD.tar.gz /backups/$YEAR/$OLD/
  55.  
  56. # Cycle through each drive and back up each
  57. for d in "${DRIVE[@]}"; do
  58.         echo "- Backing up drive $d" >> $BKLOG
  59.  
  60.         # By default, at least don't backup lost+found directories
  61.         EX="--exclude=lost+found"
  62.  
  63.         # If we are backing up drive 1 (/dev/sda), there's to exclude
  64.         if [ $d == "sda" ]; then
  65.                 for e in "${SDAEX[@]}"; do
  66.                         EX="`echo -n $EX` --exclude=$e"
  67.                 done
  68.         fi
  69.  
  70.         # Do the magic work and display some cool info
  71.         SD=$( { time tar -cpPzf $BKDIR/$d.tar.gz $EX ${BACKUP[$ARRPOS]}; } 2>&1 )
  72.         SD=`echo -n "$SD" | grep real`
  73.         MIN=`echo -n "$SD" | awk '{printf substr($2,0,2)}'`
  74.         SEC=`echo -n "$SD" | awk '{printf substr($2,3)}'`
  75.         SD=$(ls -liha $BKDIR/$d.tar.gz)
  76.         SIZE=`echo -n $SD | awk '{printf $6}'`
  77.  
  78.         let ARRPOS++
  79. done
  80.  
  81. for d in "${DRIVE[@]}"; do
  82.         # By default, at least don't backup lost+found directories
  83.         EX="--exclude=lost+found"
  84.  
  85.         # If we are backing up drive 1 (/dev/sda), there's to exclude
  86.         if [ $d == "sda" ]; then
  87.                 for e in "${SDAEX[@]}"; do
  88.                         EX="`echo -n $EX` --exclude=$e"
  89.                 done
  90.         fi
  91. done
  92.  
  93. # Mail this script out...ssmtp for GMail accounts, otherwise change for appropriate MTA
  94. /usr/sbin/ssmtp -t < $BKLOG
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement