using rsync with scripts (cronjobs) and automated backups

lewis Eklund butler lbutler at covisp.net
Wed Apr 23 22:57:07 GMT 2008


On 22-Apr-2008, at 06:59, Peter Heiss wrote:
> I am wondering if it would be possible to write a script or a  
> cronjob in
> linux using Rsync to run an automated backup of a server, or serveral
> servers if possible. I am very new with writing scripts and such, so  
> any
> help or suggestions with how to get started would be great!!!


#!/bin/bash

BACKUP="/backup/"
MACHINE="mymachine"
BAKLOC="${BACKUP}${MACHINE}"

if [ -f ${BAKLOC}.sday.0/.rsync_bak_complete ]
       then
       if [ "`date +%d`" -eq 1 ]
       then
             [ -d ${BAKLOC}.monthly.6 ] && rm -rf ${BAKLOC}.monthly.6
             [ -d ${BAKLOC}.monthly.5 ] && mv ${BAKLOC}.mothly.5 $ 
{BAKLOC}.monthly.6
             [ -d ${BAKLOC}.monthly.4 ] && mv ${BAKLOC}.mothly.4 $ 
{BAKLOC}.monthly.5
             [ -d ${BAKLOC}.monthly.3 ] && mv ${BAKLOC}.mothly.3 $ 
{BAKLOC}.monthly.4
             [ -d ${BAKLOC}.monthly.2 ] && mv ${BAKLOC}.mothly.2 $ 
{BAKLOC}.monthly.3
             [ -d ${BAKLOC}.monthly.1 ] && mv ${BAKLOC}.mothly.1 $ 
{BAKLOC}.monthly.2
             [ -d ${BAKLOC}.monthly.0 ] && mv ${BAKLOC}.mothly.0 $ 
{BAKLOC}.monthly.1
             [ -d ${BAKLOC}.weekly.3 ] && mv ${BAKLOC}.weekly.3 $ 
{BAKLOC}.monthly.0
       fi
       if [ "`date +%w`" -eq 0 ]
       then
             echo "Rotating Weekly"
          	[ -d ${BAKLOC}.weekly.3 ] && rm -rf ${BAKLOC}.weekly.3
          	[ -d ${BAKLOC}.weekly.2 ] && mv ${BAKLOC}.weekly.2 $ 
{BAKLOC}.weekly.3
          	[ -d ${BAKLOC}.weekly.1 ] && mv ${BAKLOC}.weekly.1 $ 
{BAKLOC}.weekly.2
          	[ -d ${BAKLOC}.weekly.0 ] && mv ${BAKLOC}.weekly.0 $ 
{BAKLOC}.weekly.1
          	[ -d ${BAKLOC}.daily.6 ] && mv ${BAKLOC}.daily.6 $ 
{BAKLOC}.weekly.0
       fi
       if [ "`date +%H`" -eq 0 ]
       then
             echo "Rotating Daily"
             [ -d ${BAKLOC}.daily.6 ] && rm -rf ${BAKLOC}.daily.6
             [ -d ${BAKLOC}.daily.5 ] && mv ${BAKLOC}.daily.5 $ 
{BAKLOC}.daily.6
             [ -d ${BAKLOC}.daily.4 ] && mv ${BAKLOC}.daily.4 $ 
{BAKLOC}.daily.5
             [ -d ${BAKLOC}.daily.3 ] && mv ${BAKLOC}.daily.3 $ 
{BAKLOC}.daily.4
             [ -d ${BAKLOC}.daily.2 ] && mv ${BAKLOC}.daily.2 $ 
{BAKLOC}.daily.3
             [ -d ${BAKLOC}.daily.1 ] && mv ${BAKLOC}.daily.1 $ 
{BAKLOC}.daily.2
             [ -d ${BAKLOC}.daily.0 ] && mv ${BAKLOC}.daily.0 $ 
{BAKLOC}.daily.1
            # See line below #
fi

echo "Rsyncing..."
/usr/local/bin/rsync -aCHh --stats --delete-after --delete-excluded \
     --exclude="/backup/" --exclude-from=/var/.rexcludes \
     --link-dest="${BAKLOC}.daily.1" / ${BAKLOC}.daily.0
/usr/bin/touch ${BAKLOC}.sday.0/.rsync_bak_complete
echo "...done."


This will create a daily backup for 7 days, a weekly backup for 4  
weeks, and a monthly backup for 6 months.  It uses hard links to  
conserve space.

I use a different script to do hourly backups against daily.0, but I  
remove all of those each day.

#insert above#
  [ -d ${BAKLOC}.hourly.23 ] && rm -rf ${BAKLOC}.hourly.*

This line only gets executed if all 24 hourly backups ran that day.

the hourly backup command is

/usr/local/bin/rsync -aCHh --stats --delete-after --delete-excluded \
     --exclude="/backup/" --exclude-from=/var/.rexcludes \
     --link-dest="${BAKLOC}.daily.0" / ${BAKLOC}.hourly.0

and /var/.rexcludes contains:
===begin
SPAM/
*.core
tmp/*
*.mov
*.avi
*.mp3
user1/
user2/
===end

which should be pretty self-explanatory.





More information about the rsync mailing list