Update symlink and remove .inprogress only after success (#264)

This commit is contained in:
qinjunjerry 2023-12-17 19:51:09 +01:00 committed by GitHub
parent 6664e6c5bc
commit 7af3df3644
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -97,10 +97,10 @@ fn_expire_backups() {
local current_timestamp=$EPOCH local current_timestamp=$EPOCH
local last_kept_timestamp=9999999999 local last_kept_timestamp=9999999999
# we will keep requested backup # we will keep requested backup
backup_to_keep="$1" backup_to_keep="$1"
# we will also keep the oldest backup # we will also keep the oldest backup
oldest_backup_to_keep="$(fn_find_backups | sort | sed -n '1p')" oldest_backup_to_keep="$(fn_find_backups | sort | sed -n '1p')"
# Process each backup dir from the oldest to the most recent # Process each backup dir from the oldest to the most recent
for backup_dir in $(fn_find_backups | sort); do for backup_dir in $(fn_find_backups | sort); do
@ -467,9 +467,9 @@ if [ -n "$(fn_find "$INPROGRESS_FILE")" ]; then
elif [[ "$OSTYPE" == "netbsd"* ]]; then elif [[ "$OSTYPE" == "netbsd"* ]]; then
RUNNINGPID="$(fn_run_cmd "cat $INPROGRESS_FILE")" RUNNINGPID="$(fn_run_cmd "cat $INPROGRESS_FILE")"
if ps -axp "$RUNNINGPID" -o "command" | grep "$APPNAME" > /dev/null; then if ps -axp "$RUNNINGPID" -o "command" | grep "$APPNAME" > /dev/null; then
fn_log_error "Previous backup task is still active - aborting." fn_log_error "Previous backup task is still active - aborting."
exit 1 exit 1
fi fi
else else
RUNNINGPID="$(fn_run_cmd "cat $INPROGRESS_FILE")" RUNNINGPID="$(fn_run_cmd "cat $INPROGRESS_FILE")"
if ps -p "$RUNNINGPID" -o command | grep "$APPNAME" if ps -p "$RUNNINGPID" -o command | grep "$APPNAME"
@ -525,13 +525,13 @@ while : ; do
# Purge certain old backups before beginning new backup. # Purge certain old backups before beginning new backup.
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
if [ -n "$PREVIOUS_DEST" ]; then if [ -n "$PREVIOUS_DEST" ]; then
# regardless of expiry strategy keep backup used for --link-dest # regardless of expiry strategy keep backup used for --link-dest
fn_expire_backups "$PREVIOUS_DEST" fn_expire_backups "$PREVIOUS_DEST"
else else
# keep latest backup # keep latest backup
fn_expire_backups "$DEST" fn_expire_backups "$DEST"
fi fi
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Start backup # Start backup
@ -613,11 +613,14 @@ while : ; do
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Add symlink to last backup # Add symlink to last backup
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
if [ "$EXIT_CODE" = 0 ]; then
# Create the latest symlink only when rsync succeeded
fn_rm_file "$DEST_FOLDER/latest"
fn_ln "$(basename -- "$DEST")" "$DEST_FOLDER/latest"
fn_rm_file "$DEST_FOLDER/latest" # Remove .inprogress file only when rsync succeeded
fn_ln "$(basename -- "$DEST")" "$DEST_FOLDER/latest" fn_rm_file "$INPROGRESS_FILE"
fi
fn_rm_file "$INPROGRESS_FILE"
exit $EXIT_CODE exit $EXIT_CODE
done done