Monday, May 08, 2006

rsync backup script

We learnt a hard lesson (everyone does).. Always backup your data.. Harddisks have a very bad habit of going br0ke when you most need it. I just made a small shell script that performs rsync and maintains a copy of data on another server.

CC4 and Web are hostnames of 2 remote webservers which are to be backed up. To enable seamless copying of data across servers, we use passwordless ssh logins. For this purpose, i generated a ssh-key pair for root user, wherein the private key was passwordless. And made a copy of /root/.ssh/id_dsa.pub on the remote servers as well.

The shell script for actual backup is as follows. Its being invoked via crontab every sunday afternoon.



#!/bin/bash
## Script Backs up /etc/ and /var/ from CC4 and Web

LOG_FILE=/var/log/hbc-rsync.log ## Keeps a copy in /var/log

TMP_LOG_FILE=/tmp/hbc-tmp-rsync.log ## Mails the current session's log
rm $TMP_LOG_FILE

CC4_BACKUP_DIR=/mnt/backup/cc4
WEB_BACKUP_DIR=/mnt/backup/web

CURRENT_DATE=`date`

## Sync /etc/ and /var/ from CC4

echo "Starting Backup of CC4 on : $CURRENT_DATE" >> $TMP_LOG_FILE
rsync -avzlp -e ssh --delete root@cc4:/var/ $CC4_BACKUP_DIR/var/ 2>1 1>>$TMP_LOG_FILE
rsync -avzlp -e ssh --delete root@cc4:/etc/ $CC4_BACKUP_DIR/etc/ 2>1 1>>$TMP_LOG_FILE

## Sync /etc/ and /var/ from Web
CURRENT_DATE=`date`
echo "Starting Backup of Web on : $CURRENT_DATE" >> $TMP_LOG_FILE
rsync -avzlp -e ssh --delete root@web:/var/ $WEB_BACKUP_DIR/var/ 2>1 1>>$TMP_LOG_FILE
rsync -avzlp -e ssh --delete root@web:/etc/ $WEB_BACKUP_DIR/etc/ 2>1 1>>$TMP_LOG_FILE
rsync -avzlp -e ssh --delete root@web:/home/ $WEB_BACKUP_DIR/home/ 2>1 1>>$TMP_LOG_FILE
##
cat $TMP_LOG_FILE >> $LOG_FILE
cat $TMP_LOG_FILE | mail root@localhost -s "CC4 rsync results"

0 Comments:

Post a Comment

<< Home