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