Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # RedLink Customized backup script
- # Version 1.0
- # Author: Vincent Andries <[email protected]>
- #
- # Takes backups of servers defined in SERVERS variable.
- # Script MUST run from /root/backup_tools
- # For every server create a rsync.excluse.$server file.
- # This can contain the dirs to exclude while backupping (like /proc)
- #
- # Logs will be created in /root/backup_tools/backup.log
- #
- # Incremental backups every day in daily,
- # 4 Sundays in weekly
- # first Sunday in monthly.
- #
- # Install in crontab:
- # 59 23 * * * /root/backup_tools/backup.sh
- SERVERS="SERVER1 SERVER2"
- function moveMonths {
- SERVER=$1
- LASTMONTH=`ls /mnt/backup/$SERVER/monthly/ | sort -nr | head -n 1`
- for i in `seq 0 $LASTMONTH | sort -nr` ; do
- echo "mv /mnt/backup/$SERVER/monthly/$i /mnt/backup/$SERVER/monthly/$(($i+1))" >> /root/backup_tools/backup.log
- mv /mnt/backup/$SERVER/monthly/$i /mnt/backup/$SERVER/monthly/$(($i+1))
- done
- echo "------------- Months moved -----------" >>/root/backup_tools/backup.log
- #all months are moved
- }
- function moveWeeks {
- # end of month ? If yes we need to move the months first
- WEEKNR=`date +%V`
- SERVER=$1
- if [ `echo "$WEEKNR%4" | bc` -eq "0" ] ; then
- # if [ "test" == "test" ] ; then
- # we have started a new month
- LASTWEEK=`ls /mnt/backup/$SERVER/weekly | sort -nr | head -n 1`
- moveMonths $SERVER
- # moving the last weekly backup to the first monthly backup
- echo "mv /mnt/backup/$SERVER/weekly/$LASTWEEK /mnt/backup/$SERVER/monthly/0" >> /root/backup_tools/backup.log
- mv /mnt/backup/$SERVER/weekly/$LASTWEEK /mnt/backup/$SERVER/monthly/0
- STARTSEQ="0"
- else
- # if not new month, we need to delete the last weekly backup.
- LASTWEEK=`ls /mnt/backup/$SERVER/weekly | sort -nr | head -n 1`
- echo "rm /mnt/backup/$SERVER/weekly/$LASTWEEK -rf" >> /root/backup_tools/backup.log
- rm /mnt/backup/$SERVER/weekly/$LASTWEEK -rf
- STARTSEQ="0"
- fi
- LASTWEEK=`ls /mnt/backup/$SERVER/weekly | sort -nr | head -n 1`
- for i in `seq $STARTSEQ $LASTWEEK | sort -nr` ; do
- echo "mv /mnt/backup/$SERVER/weekly/$i /mnt/backup/$SERVER/weekly/$(($i+1))" >> /root/backup_tools/backup.log
- mv /mnt/backup/$SERVER/weekly/$i /mnt/backup/$SERVER/weekly/$(($i+1))
- done
- # All weeks are moved
- echo "----------Weeks Moved-----------" >>/root/backup_tools/backup.log
- }
- for SERVER in $SERVERS ; do
- #beginning of backup. Checking if we are sunday
- if [ `date +%A` == "Sunday" ] ; then
- # if [ "Sunday" == "Sunday" ] ; then
- moveWeeks $SERVER
- LASTDAY=`ls /mnt/backup/$SERVER/daily | sort -nr | head -n 1`
- mv /mnt/backup/$SERVER/daily/$LASTDAY /mnt/backup/$SERVER/weekly/0
- echo "mv /mnt/backup/$SERVER/daily/$LASTDAY /mnt/backup/$SERVER/weekly/0" >> /root/backup_tools/backup.log
- else
- # removing last backup if we are not on sunday
- # else our last backup is already moved
- LASTDAY=`ls /mnt/backup/$SERVER/daily | sort -nr | head -n 1`
- echo "rm /mnt/backup/$SERVER/daily/$LASTDAY -rf" >> /root/backup_tools/backup.log
- rm /mnt/backup/$SERVER/daily/$LASTDAY -rf
- fi
- # recursiveley moving the days down
- LASTDAY=`ls /mnt/backup/$SERVER/daily | sort -nr | head -n 1`
- # always moving starting from 0. This will be filled using rsync
- for i in `seq 1 $LASTDAY | sort -nr`; do
- echo "mv /mnt/backup/$SERVER/daily/$i /mnt/backup/$SERVER/daily/$(($i+1))" >> /root/backup_tools/backup.log
- mv /mnt/backup/$SERVER/daily/$i /mnt/backup/$SERVER/daily/$(($i+1)) >> /root/backup_tools/backup.log
- done
- if [ ! -d "/mnt/backup/$SERVER/daily/1" ] ; then
- echo "mkdir /mnt/backup/$SERVER/daily/1" >>/root/backup_tools/backup.log
- mkdir /mnt/backup/$SERVER/daily/1
- fi
- echo "(cd /mnt/backup/$SERVER/daily/0/ && find . -print | cpio -dplm /mnt/backup/$SERVER/daily/1)" >> /root/backup_tools/backup.log
- (cd /mnt/backup/$SERVER/daily/0/ && find . -print | cpio -dplm /mnt/backup/$SERVER/daily/1 >>/root/backup_tools/cpio.log)
- 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
- #rsync -avz --delete --exclude-from "/root/backup_tools/rsync.exclude.$SERVER" --numeric-ids --progress -e ssh $SERVER:/ /mnt/backup/$SERVER/daily/0
- 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
- echo "[`date +%Y-%m-%d`]-----------[ $SERVER DONE ]---------" >>/root/backup_tools/backup.log
- done
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement