X-Git-Url: https://git.llucax.com/software/bacap.git/blobdiff_plain/72d1940052acdebd8ecf642295c5165ec9946486..c830ac2bd3344cf0b4dca1dcd381b1c0f32f3191:/bacap?ds=inline diff --git a/bacap b/bacap index 9de8dc2..976ee08 100755 --- a/bacap +++ b/bacap @@ -35,7 +35,7 @@ DATE_FMT="%Y-%m-%d" PING_CHECK=1 # rsync flags to use -RSYNC_FLAGS="-aAXHx --numeric-ids --delete" +RSYNC_FLAGS="-aAHSXx --numeric-ids" # rsync flags to use when in verbose mode RSYNC_VERBOSE_FLAGS="-v --stats" @@ -66,8 +66,8 @@ run= RSYNC_FLAGS="$RSYNC_FLAGS $RSYNC_VERBOSE_FLAGS" [ $DEBUG -eq 1 ] && V=-v +exec 3>&2 [ -n "$LOG_FILE" ] && - exec 3>&2 && exec 1>>"$LOG_FILE" && exec 2>>"$LOG_FILE" @@ -103,6 +103,7 @@ do source "$host_path/bacaprc" 2>/dev/null host=`basename "$host_path"` host_backup_path="$BACKUP_PATH/$host" + mkdir -p $host_backup_path dst="$BACKUP_PATH/$host/$date" src=`cat "$host_path/paths"` [ "$host" != "$LOCALHOST" ] && @@ -113,7 +114,7 @@ do current_dir="$host_backup_path/`readlink \"$current_link\"`" extra_flags= plog "-----------------------------------------------------------------" - plog "Backup for host $host" + plog "Backup for host $host started at `date '+%Y-%m-%d %H:%M:%S'`" plog "-----------------------------------------------------------------" plog "Source: $src" plog "Destination: $dst" @@ -126,20 +127,38 @@ do perror "$host is down, skipping..." && continue [ -r "$exclude" ] && - extra_flags="--exclude-from=$exclude --delete-excluded" + extra_flags="--exclude-from=$exclude" [ -r "$include" ] && extra_flags="$extra_flags --include-from=$include" plog "Running rsync..." $run rsync $RSYNC_FLAGS $extra_flags \ - --link-dest="$current_dir" $src "$dst/" || - ret=$(($ret+1)) - plog "Moving current..." - $run rm $V "$current_link" || + --link-dest="$current_dir" $src "$dst/" + rsync_ret=$? + case $rsync_ret in + 0) + # Normal return + ;; + 24) + # Ignore error 24 from rsync ("Partial transfer due to + # vanished source files") which is somewhat expected + # since we don't do a snapshot + ;; + *) + # Any other error is important enough + ret=$(($ret+1)) + ;; + esac + + if [ $ret -eq $saved_ret ] + then + # Only move current if rsync did not fail, to avoid dangling + # symlinks + plog "Moving current..." + $run rm -f $V "$current_link" || ret=$(($ret+1)) - $run ln -s $V "$date" "$current_link" || + $run ln -s $V "$date" "$current_link" || ret=$(($ret+1)) - if [ $ret -ne $saved_ret ] - then + else ERROR_HOSTS="$ERROR_HOSTS $host" fi done @@ -150,10 +169,14 @@ plog "=========================================================================" if [ $ret -ne 0 ] then - pout "There were some errors when running the backup on: $ERROR_HOSTS" pout - pout "Please take a look at the log: $LOG_FILE" + pout "There were some errors when running the backup on: $ERROR_HOSTS" pout + if [ -n "$LOG_FILE" ] + then + pout "Please take a look at the log: $LOG_FILE" + pout + fi fi exit $ret