Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 May 2003 02:40:22 -0400
From:      Chuck Swiger <cswiger@mac.com>
To:        freebsd@werosoft.com
Cc:        freebsd-questions@freebsd.org
Subject:   Backup script, was: Re: storage data
Message-ID:  <3EC487D6.5030806@mac.com>
In-Reply-To: <3EC16C98.11161.4AB9BB@localhost>
References:  <3EC16C98.11161.4AB9BB@localhost>

next in thread | previous in thread | raw e-mail | index | archive | help
Ronald Weinrich wrote:
[ ... ]
> has any one a script written, to pull data from  host-a to host-b, tar it on 
> host-b in regular (cron) time. 

Rsync is your friend; so are more serious backup tools like Amanda, 
Retrospect, and even Legato Networker.  That being said, here's a shell 
script that you might find useful.  Enjoy!

-Chuck

	==============

#! /bin/sh
####
#
# Backup script.  Takes SSH key as the first argument, then a list of
# one or more hostnames to backup.  This script removes slashes found
# in hostnames and tests whether a host is pingable before trying to
# operate on that host.
#
# In other words, if you configure one host at a time to backup okay
# by adjusting SSH keys and such, running "./backup.sh _ident_ *.com"
# at a later date will backup all of the hosts manually configured
# automaticly.  If a host is down, it will be skipped without its
# files being deleted by the "rsync --delete" or "rm" commands
# (if enabled; see below).
#
# Copyright (c) 2003.  Charles Swiger <chuck@pkix.net>
# $Id: backup.sh,v 1.2 2003/05/16 06:22:03 chuck Exp $
#
####

if [ $# -lt 2 ]; then
     echo "Usage: backup.sh <SSH key> <host1> [<host2>...]"
     exit 1
fi

ID=${1}
shift
echo "Authenticating via SSH key id: ${ID}"
echo

PATH=/usr/local/bin:/usr/bin:/usr/sbin:/usr/libexec:/usr/lib:/bin:/sbin
MKDIR="mkdir -p"
RM="/bin/rm -rf"
RSYNC_RSH="ssh -i ${ID}"
export RSYNC_RSH
COPY="rsync -aqRC --copy-unsafe-links --delete"
# Alternative COPY version if you don't have or want to use rsync:
# COPY="scp -rq -i ${ID}"

# Loop through all of the remaing arguments, and test whether reachable
for name ; do

     CLIENT=`echo "$name" | tr -d '/'`
     if { ! /sbin/ping -q -c 1 -t 10 ${CLIENT} > /dev/null ; } then
         echo "${CLIENT} is unpingable and may be down.  Consult errors 
above."
         continue
     fi

     echo "Backing up ${CLIENT} at `date`."
     # This is the destination to backup the client to.
     DESTROOT=/export/Backups/"${CLIENT}"/

     ####
     # DANGEROUS: (optionally) completely clean contents first?
     #
     # You will probably be sorry if you leave this enabled and run
     # backups via cron.  Only turn this on when running by hand.
     # ${RM} ${DESTROOT}
     ####

     ${MKDIR} ${DESTROOT}

     ${COPY} ${CLIENT}:/etc              ${DESTROOT} 2> /dev/null
     ${COPY} ${CLIENT}:/var/log          ${DESTROOT} 2> /dev/null
     ${COPY} ${CLIENT}:/var/named        ${DESTROOT} 2> /dev/null
     ${COPY} ${CLIENT}:/usr/local/etc    ${DESTROOT} 2> /dev/null
     ${COPY} ${CLIENT}:/opt/apache/conf  ${DESTROOT} 2> /dev/null
     # add directory locations you care about here...
done

echo
echo "Finished backup at `date`."




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3EC487D6.5030806>