Advertisement
goez

backupscript

Aug 22nd, 2011
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.11 KB | None | 0 0
  1. #!/bin/bash
  2. # RedLink Customized backup script
  3. # Version 1.0
  4. # Author: Vincent Andries <vincent.andries@redlink.be>
  5. #
  6. # Takes backups of servers defined in SERVERS variable.
  7. # Script MUST run from /root/backup_tools
  8. # For every server create a rsync.excluse.$server file.
  9. # This can contain the dirs to exclude while backupping (like /proc)
  10. #
  11. # Logs will be created in /root/backup_tools/backup.log
  12. #
  13. # Incremental backups every day in daily,
  14. # 4 Sundays in weekly
  15. # first Sunday in monthly.
  16. #
  17. # Install in crontab:
  18. # 59 23 * * * /root/backup_tools/backup.sh
  19.  
  20.  
  21. SERVERS="SERVER1 SERVER2"
  22.  
  23. function moveMonths {
  24.         SERVER=$1
  25.         LASTMONTH=`ls /mnt/backup/$SERVER/monthly/ | sort -nr | head -n 1`
  26.         for i in `seq 0 $LASTMONTH | sort -nr` ; do
  27.                 echo "mv /mnt/backup/$SERVER/monthly/$i /mnt/backup/$SERVER/monthly/$(($i+1))" >> /root/backup_tools/backup.log
  28.                 mv /mnt/backup/$SERVER/monthly/$i /mnt/backup/$SERVER/monthly/$(($i+1))
  29.         done
  30.         echo "------------- Months moved -----------" >>/root/backup_tools/backup.log
  31.         #all months are moved
  32. }
  33.  
  34. function moveWeeks {
  35.         # end of month ? If yes we need to move the months first
  36.         WEEKNR=`date +%V`
  37.         SERVER=$1
  38.         if [ `echo "$WEEKNR%4" | bc` -eq "0" ] ; then
  39. #       if [ "test" == "test" ] ; then
  40.                 # we have started a new month
  41.                 LASTWEEK=`ls /mnt/backup/$SERVER/weekly | sort -nr | head -n 1`
  42.                 moveMonths $SERVER
  43.                 # moving the last weekly backup to the first monthly backup
  44.                 echo "mv /mnt/backup/$SERVER/weekly/$LASTWEEK /mnt/backup/$SERVER/monthly/0" >> /root/backup_tools/backup.log
  45.                 mv /mnt/backup/$SERVER/weekly/$LASTWEEK /mnt/backup/$SERVER/monthly/0
  46.                 STARTSEQ="0"
  47.         else
  48.                 # if not new month, we need to delete the last weekly backup.
  49.                 LASTWEEK=`ls /mnt/backup/$SERVER/weekly | sort -nr | head -n 1`
  50.                 echo "rm /mnt/backup/$SERVER/weekly/$LASTWEEK -rf" >> /root/backup_tools/backup.log
  51.                 rm /mnt/backup/$SERVER/weekly/$LASTWEEK -rf
  52.                 STARTSEQ="0"
  53.         fi
  54.         LASTWEEK=`ls /mnt/backup/$SERVER/weekly | sort -nr | head -n 1`
  55.         for i in `seq $STARTSEQ $LASTWEEK | sort -nr` ; do
  56.                 echo "mv /mnt/backup/$SERVER/weekly/$i /mnt/backup/$SERVER/weekly/$(($i+1))" >> /root/backup_tools/backup.log
  57.                 mv /mnt/backup/$SERVER/weekly/$i /mnt/backup/$SERVER/weekly/$(($i+1))
  58.         done
  59.         # All weeks are moved
  60.         echo "----------Weeks Moved-----------" >>/root/backup_tools/backup.log
  61. }
  62. for SERVER in $SERVERS ; do
  63.         #beginning of backup. Checking if we are sunday
  64.         if [ `date +%A` == "Sunday" ] ; then
  65. #       if [ "Sunday" == "Sunday" ] ; then
  66.                 moveWeeks $SERVER
  67.                 LASTDAY=`ls /mnt/backup/$SERVER/daily | sort -nr | head -n 1`
  68.                 mv /mnt/backup/$SERVER/daily/$LASTDAY /mnt/backup/$SERVER/weekly/0
  69.                 echo "mv /mnt/backup/$SERVER/daily/$LASTDAY /mnt/backup/$SERVER/weekly/0" >> /root/backup_tools/backup.log
  70.         else
  71.                 # removing last backup if we are not on sunday
  72.                 # else our last backup is already moved
  73.                 LASTDAY=`ls /mnt/backup/$SERVER/daily | sort -nr | head -n 1`
  74.                 echo "rm /mnt/backup/$SERVER/daily/$LASTDAY -rf" >> /root/backup_tools/backup.log
  75.                 rm /mnt/backup/$SERVER/daily/$LASTDAY -rf
  76.  
  77.         fi
  78.         # recursiveley moving the days down
  79.         LASTDAY=`ls /mnt/backup/$SERVER/daily | sort -nr | head -n 1`
  80.         # always moving starting from 0. This will be filled using rsync
  81.         for i in `seq 1 $LASTDAY | sort -nr`; do
  82.                 echo "mv /mnt/backup/$SERVER/daily/$i /mnt/backup/$SERVER/daily/$(($i+1))" >> /root/backup_tools/backup.log
  83.           mv /mnt/backup/$SERVER/daily/$i /mnt/backup/$SERVER/daily/$(($i+1)) >> /root/backup_tools/backup.log
  84.         done
  85.         if [ ! -d "/mnt/backup/$SERVER/daily/1" ] ; then
  86.                 echo "mkdir /mnt/backup/$SERVER/daily/1" >>/root/backup_tools/backup.log
  87.                 mkdir /mnt/backup/$SERVER/daily/1
  88.         fi
  89.         echo "(cd /mnt/backup/$SERVER/daily/0/ && find . -print | cpio -dplm /mnt/backup/$SERVER/daily/1)" >> /root/backup_tools/backup.log
  90.         (cd /mnt/backup/$SERVER/daily/0/ && find . -print | cpio -dplm /mnt/backup/$SERVER/daily/1 >>/root/backup_tools/cpio.log)
  91.         echo "rsync -avz --delete --exclude-from '/root/backup_tools/rsync.exclude.$SERVER' --numeric-ids --progress -e ssh $SERVER:/ /mnt/backup/$SERVER/daily/0" >> /root/backup_tools/backup.log
  92.         #rsync -avz --delete --exclude-from "/root/backup_tools/rsync.exclude.$SERVER" --numeric-ids --progress -e ssh $SERVER:/ /mnt/backup/$SERVER/daily/0
  93.         rsync -az --log-file /root/backup_tools/rsync.log --delete --exclude-from "/root/backup_tools/rsync.exclude.$SERVER" --numeric-ids --progress -e ssh $SERVER:/ /mnt/backup/$SERVER/daily/0
  94.         echo "[`date +%Y-%m-%d`]-----------[ $SERVER DONE ]---------" >>/root/backup_tools/backup.log
  95. done
  96. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement