#!/bin/bash MAX_VERSIONS=5 BASE_DIR="/home/backy/sw-backups" DB_BACKUPS="$BASE_DIR/db" DIR_BACKUPS="$BASE_DIR/dir" MODE="0600" OWNER="backy" EXCLUDE_LIST="/etc/backup.exclude" mkdir -p "$DB_BACKUPS" "$DIR_BACKUPS" chown -R "$OWNER" "$DB_BACKUPS" "$DIR_BACKUPS" rotate(){ local dir="$1" local pattern="$2" local versions="$3" local files=($(find "$dir" -name "$pattern" -printf "%C@ %p\n" | sort -n | cut -d' ' -f2-)) while [[ "${#files[@]}" -ge "$versions" ]] do rm -rf "${files[0]}" unset files[0] backups=( "${files[@]}" ) done } store_compressed(){ local dir="$1" local name="$2" local ext="$3" local versions="$4" shift 4 local tmpfile="`mktemp`" $@ | bzip2 -9 -c > "$tmpfile" [[ "${PIPESTATUS[0]}" -eq 0 ]] || { rm -f "$tmpfile" return 1 } rotate "$dir" "${name}_*$ext" "$versions" local bname="$dir/${name}_`date +"%d.%m.%Y_%H.%M"`.$ext" mv "$tmpfile" "$bname" || { rm -f "$tmpfile" return 1 } chmod "$MODE" "$bname" chown "$OWNER" "$bname" } backup_db(){ local dbname="$1" local user="$2" local password="$3" store_compressed "$DB_BACKUPS" "$dbname" "sql.bz2" "$MAX_VERSIONS" mysqldump -u "$user" --password="$password" -B "$dbname" } backup_dir(){ local dir="$1" local parent="`dirname "$dir"`" local fname="`basename "$dir"`" store_compressed "$DIR_BACKUPS" "$fname" "tar.bz2" "$MAX_VERSIONS" tar -X "$EXCLUDE_LIST" -C "$parent" -cf - "$fname" } backup_db dbname dbuser dbpassword backup_db dbname dbuser dbpassword backup_dir /home/site1/public_html backup_dir /home/site1/public_html # now run the syncer su - backy -c "sh -c 'cd dropbox-syncer && ruby cron.rb'"