Comment Re:Multiple answers (Score 1) 266
Heres mine, in bash/sh. use by creating an rsync include/exclude file named as fqdn.rsync, then run rsync_backup.sh fqdn.rsync. GPLV2
#!/bin/sh
PROG="$( basename $0 )"
VER=20101022001
run_backup() {
HOST="$1"
EXCLUDE_FILE="$2"
BACKUP_DIR="$3"
DATE="$( date +%Y%m%d_%H%M%S )"
rm -rf -- "$BACKUP_DIR/$HOST/tmp/"
mkdir -p -- "$BACKUP_DIR/$HOST/tmp/" &&
rsync -avhSPW --stats -e ssh --delete --delete-excluded -b \
--compress-level=9 \
--link-dest="$BACKUP_DIR/$HOST/cur/" \
--exclude-from="$EXCLUDE_FILE" "$HOST:/" "$BACKUP_DIR/$HOST/tmp/" 2>&1 | tee "$BACKUP_DIR/$HOST/$DATE.log" &&
echo "Commiting new backup..." &&
mv -v -- "$BACKUP_DIR/$HOST/tmp/" "$BACKUP_DIR/$HOST/$DATE/" &&
echo "Setting backup as current..." &&
ln -sfnv -- "$DATE" "$BACKUP_DIR/$HOST/cur" &&
return 0
echo "Error encountered!"
mv -v "$BACKUP_DIR/$HOST/$DATE.log" "$BACKUP_DIR/$HOST/$DATE.err"
return 1
}
if [ "$1" = "-chkupd" ]; then
chkupd.sh $0
exit $?
fi
while [ -n "$1" ]; do
FILE="$1"
echo "Reading config file '$FILE'"
echo "$FILE" | grep '[.]rsync$' >
if [ $? = 0 ]; then
HOST="$( basename "$FILE" )"
HOST="${HOST/%.rsync/}"
if [ "${FILE:1:1}" != "/" ]; then
FILE="$( pwd )/$FILE"
fi
BACKUP_DIR="$( dirname $FILE)"
echo "Backing up from host '$HOST' to '$BACKUP_DIR/$HOST/' ($FILE)"
chkhost.sh "$HOST" 22
if [ $? -eq 0 ]; then
run_backup $HOST $FILE $BACKUP_DIR
fi
echo
fi
shift
done