#!/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'"