From 25ad8f07a6bfc9dddb9d1cd10073d184c0cc399f Mon Sep 17 00:00:00 2001 From: bhuvi8 Date: Tue, 17 Dec 2013 02:15:43 +0530 Subject: [PATCH 1/2] Added rsync error handling and modified WARN and ERROR functions to print to stderr --- rsync_tmbackup.sh | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) mode change 100644 => 100755 rsync_tmbackup.sh diff --git a/rsync_tmbackup.sh b/rsync_tmbackup.sh old mode 100644 new mode 100755 index b2131c9..a32b1eb --- a/rsync_tmbackup.sh +++ b/rsync_tmbackup.sh @@ -7,8 +7,8 @@ APPNAME=$(basename $0 | sed "s/\.sh$//") # ----------------------------------------------------------------------------- fn_log_info() { echo "$APPNAME: $1"; } -fn_log_warn() { echo "$APPNAME: [WARNING] $1"; } -fn_log_error() { echo "$APPNAME: [ERROR] $1"; } +fn_log_warn() { echo "$APPNAME: [WARNING] $1" 1>&2; } +fn_log_error() { echo "$APPNAME: [ERROR] $1" 1>&2; } # ----------------------------------------------------------------------------- # Make sure everything really stops when CTRL+C is pressed @@ -223,7 +223,7 @@ while : ; do # TODO: find better way to check for out of space condition without parsing log. NO_SPACE_LEFT="$(grep "No space left on device (28)\|Result too large (34)" "$LOG_FILE")" - rm -- "$LOG_FILE" + #rm -- "$LOG_FILE" if [ -n "$NO_SPACE_LEFT" ]; then fn_log_warn "No space left on device - removing oldest backup and resuming." @@ -252,7 +252,14 @@ while : ; do ln -vs -- "$(basename -- "$DEST")" "$DEST_FOLDER/latest" rm -f -- "$INPROGRESS_FILE" - # TODO: grep for "^rsync error:.*$" in log - fn_log_info "Backup completed without errors." + + # ----------------------------------------------------------------------------- + # Check whether rsync reported any errors + # ----------------------------------------------------------------------------- + if [[ "$(sed -n '/rsync error:/p;/rsync:/p' -- "$LOG_FILE" | wc -l)" -ge 1 ]]; then + fn_log_error "rsync encountered error, please check $LOG_FILE for more details." + else + fn_log_info "Backup completed without errors." + fi exit 0 done From c8ae23490478a014696ea78f8d662e6ab07ed5eb Mon Sep 17 00:00:00 2001 From: bhuvi8 Date: Wed, 18 Dec 2013 00:01:56 +0530 Subject: [PATCH 2/2] Deleting log file when no error is found and proper handling of rsync errors through log file rather than through exit code --- rsync_tmbackup.sh | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/rsync_tmbackup.sh b/rsync_tmbackup.sh index a32b1eb..dc108e1 100755 --- a/rsync_tmbackup.sh +++ b/rsync_tmbackup.sh @@ -214,7 +214,6 @@ while : ; do touch -- "$INPROGRESS_FILE" eval $CMD - RSYNC_EXIT_CODE=$? # ----------------------------------------------------------------------------- # Check if we ran out of space @@ -223,8 +222,6 @@ while : ; do # TODO: find better way to check for out of space condition without parsing log. NO_SPACE_LEFT="$(grep "No space left on device (28)\|Result too large (34)" "$LOG_FILE")" - #rm -- "$LOG_FILE" - if [ -n "$NO_SPACE_LEFT" ]; then fn_log_warn "No space left on device - removing oldest backup and resuming." @@ -239,9 +236,12 @@ while : ; do continue fi - if [ "$RSYNC_EXIT_CODE" != "0" ]; then - fn_log_error "Exited with error code $RSYNC_EXIT_CODE" - exit $RSYNC_EXIT_CODE + # ----------------------------------------------------------------------------- + # Check whether rsync reported any errors + # ----------------------------------------------------------------------------- + if [[ "$(sed -n '/rsync error:/p;/rsync:/p' -- "$LOG_FILE" | wc -l)" -ge 1 ]]; then + fn_log_error "Encountered error, please check $LOG_FILE for more details." + exit 1 fi # ----------------------------------------------------------------------------- @@ -252,14 +252,9 @@ while : ; do ln -vs -- "$(basename -- "$DEST")" "$DEST_FOLDER/latest" rm -f -- "$INPROGRESS_FILE" + rm -- "$LOG_FILE" + + fn_log_info "Backup completed without errors." - # ----------------------------------------------------------------------------- - # Check whether rsync reported any errors - # ----------------------------------------------------------------------------- - if [[ "$(sed -n '/rsync error:/p;/rsync:/p' -- "$LOG_FILE" | wc -l)" -ge 1 ]]; then - fn_log_error "rsync encountered error, please check $LOG_FILE for more details." - else - fn_log_info "Backup completed without errors." - fi exit 0 done