From owner-freebsd-questions@FreeBSD.ORG Mon Jun 7 17:25:43 2004 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A8A6116A4CE for ; Mon, 7 Jun 2004 17:25:43 +0000 (GMT) Received: from out005.verizon.net (out005pub.verizon.net [206.46.170.143]) by mx1.FreeBSD.org (Postfix) with ESMTP id 63C0A43D39 for ; Mon, 7 Jun 2004 17:25:43 +0000 (GMT) (envelope-from cswiger@mac.com) Received: from [192.168.1.3] ([68.161.84.3]) by out005.verizon.net (InterMail vM.5.01.06.06 201-253-122-130-106-20030910) with ESMTP id <20040607162720.UDON3910.out005.verizon.net@[192.168.1.3]>; Mon, 7 Jun 2004 11:27:20 -0500 Message-ID: <40C49763.3080909@mac.com> Date: Mon, 07 Jun 2004 12:27:15 -0400 From: Chuck Swiger Organization: The Courts of Chaos User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040514 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Bart Silverstrim References: <859B50A7-B893-11D8-9892-000A956D2452@chrononomicon.com> In-Reply-To: <859B50A7-B893-11D8-9892-000A956D2452@chrononomicon.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Authentication-Info: Submitted using SMTP AUTH at out005.verizon.net from [68.161.84.3] at Mon, 7 Jun 2004 11:27:15 -0500 cc: freebsd-questions Questions Subject: Re: Scripting backup of file naming? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Jun 2004 17:25:43 -0000 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 # $Id: backup.sh,v 1.3 2003/05/16 07:17:06 chuck Exp $ # #### if [ $# -lt 2 ]; then echo "Usage: backup.sh [...]" 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`."