Scripting backup of file naming?

2004-06-07 Thread Bart Silverstrim
Hello scripting gurus..
I'm sure this is an easy one for someone out there.  Here's what I'd 
like to do, and hoping someone out there knows a simple way to do this 
without ripping my hair out.  Scenario:

*Two servers, Server1 and Server2.
*I want Server1 to copy a set of files from Server2 on a regular basis 
using cron and scp.  I should be able to do that by just generating a 
ssh key and automating the login from Server1 into Server2.

*problem; on server1, I'm going to have two directories: ~/archive and 
~/workingdir.  I want the scp to move the files from server2 to 
~/workingdir, tar and zip them as a file name with a date attached 
(like backup06072004.tgz) to make the filename distinctive, then move 
that file from ~/workingdir to ~/archive.  The filename would need to 
be distinctive both to allow for reference when needing to restore a 
snapshot and also to keep the archives from overwriting each other when 
moved over.

Is there a simple way to do this with a script running from cron?
-Bart
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: Scripting backup of file naming?

2004-06-07 Thread Chuck Swiger
Bart Silverstrim wrote:
[ ... ]
*problem; on server1, I'm going to have two directories: ~/archive and 
~/workingdir.  I want the scp to move the files from server2 to 
~/workingdir, tar and zip them as a file name with a date attached (like 
backup06072004.tgz) to make the filename distinctive, then move that 
file from ~/workingdir to ~/archive.  The filename would need to be 
distinctive both to allow for reference when needing to restore a 
snapshot and also to keep the archives from overwriting each other when 
moved over.
Consider the following script.  You may want to switch to using scp rather 
than rsync, and you may choose to hardcode the SSH key rather than passing it 
in as the first argument.  You might also want to change how $DESTROOT is set 
to match the paths you want to use.  Finally, you will want to add something like:

cd ${DESTROOT}/..
ARCHIVEFILE=/home/SOMEUSER/archive/backup`date +%Y%m%d`.tgz
tar cf - ${CLIENT} | gzip --best  ${ARCHIVEFILE}
...just before the final done.  Test things out by hand for a while (or on a 
machine-by-machine basis), and then set this up in cron.

--
-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 [EMAIL PROTECTED]
# $Id: backup.sh,v 1.3 2003/05/16 07:17:06 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`.
___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: Scripting backup of file naming?

2004-06-07 Thread Giorgos Keramidas
On 2004-06-07 11:01, Bart Silverstrim [EMAIL PROTECTED] wrote:
 *problem; on server1, I'm going to have two directories: ~/archive and
 ~/workingdir.  I want the scp to move the files from server2 to
 ~/workingdir, tar and zip them as a file name with a date attached
 (like backup06072004.tgz) to make the filename distinctive, then move
 that file from ~/workingdir to ~/archive.  The filename would need to
 be distinctive both to allow for reference when needing to restore a
 snapshot and also to keep the archives from overwriting each other when
 moved over.

 Is there a simple way to do this with a script running from cron?

Yes, there is.  Write a shell script that contains all the command lines
you want to run and use cron to call it periodically.

As for the dated filenames, it's easy:

#!/bin/sh

outfilename=backup-$(date '+%y-%m-%d-%H%M').tar.bz2
echo Saving files into: ${outfilename}
tar cvf - path/to/dir/1  path/to/dir/2 | \
bzip2 -9c - ${outfilename}

This should be almost all you need.

___
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to [EMAIL PROTECTED]