# Don't actually do anything, just print the commands
DRY_RUN=0
+# Force synchronization, even when the target already exist
+FORCE_SYNC=0
+
# Log file (if empty, print to stdout/err)
LOG_FILE=
# Date format used for backed up directories (passed to the date command)
DATE_FMT="%Y-%m-%d"
+# Ping remote hosts to check if they are up (set to 0 if your hosts don't
+# reply to ICMP pings).
+PING_CHECK=1
+
# rsync flags to use
RSYNC_FLAGS="-aAXHx --numeric-ids --delete"
echo "$@" >&2
}
-host_up() {
+ping_host() {
ping -c1 "$1" > /dev/null 2>&1
}
ret=0
for host_path in "$CONFIG_PATH"/*
do
+ saved_ret=$ret
# Load default config and override config if correspond
load_config
source "$host_path/bacaprc" 2>/dev/null
include="$host_path/includes"
current_link="$host_backup_path/current"
current_dir="$host_backup_path/`readlink \"$current_link\"`"
- exclude_flags=
- include_flags=
+ extra_flags=
plog "-----------------------------------------------------------------"
plog "Backup for host $host"
plog "-----------------------------------------------------------------"
- plog "Source: "$src
+ plog "Source: $src"
plog "Destination: $dst"
plog "Last: $current_dir"
plog
- [ -d "$dst" ] &&
+ [ -d "$dst" ] && [ "$FORCE_SYNC" -ne 1 ] &&
perror "$dst already exists, skipping..." &&
continue
- ! host_up $host &&
+ [ "$PING_CHECK" -eq 1 ] && ! ping_host $host &&
perror "$host is down, skipping..." &&
continue
[ -r "$exclude" ] &&
extra_flags="--exclude-from=$exclude --delete-excluded"
[ -r "$include" ] &&
extra_flags="$extra_flags --include-from=$include"
- plog "Rotating backup..."
- $run cp -al $V "$current_dir" "$dst" ||
- ret=$(($ret+1))
plog "Running rsync..."
- $run rsync $RSYNC_FLAGS $extra_flags $src "$dst/" ||
+ $run rsync $RSYNC_FLAGS $extra_flags \
+ --link-dest="$current_dir" $src "$dst/" ||
ret=$(($ret+1))
plog "Moving current..."
$run rm $V "$current_link" ||
ret=$(($ret+1))
$run ln -s $V "$date" "$current_link" ||
ret=$(($ret+1))
+ if [ $ret -ne $saved_ret ]
+ then
+ ERROR_HOSTS="$ERROR_HOSTS $host"
+ fi
done
plog "========================================================================="
if [ $ret -ne 0 ]
then
- pout 'There were some errors when running the backup.'
+ pout "There were some errors when running the backup on: $ERROR_HOSTS"
pout
pout "Please take a look at the log: $LOG_FILE"
pout