From baedfe9eeaf7805d556984a13c60fc74748c5050 Mon Sep 17 00:00:00 2001 From: Charlie Silverman Date: Sun, 18 Oct 2026 13:36:53 -0700 Subject: [PATCH] Updated to version 1.7 Added email delivery of current execution log on success, failure, or interruption. --- AppBackup-restic.sh | 99 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 87 insertions(+), 12 deletions(-) diff --git a/AppBackup-restic.sh b/AppBackup-restic.sh index 1d3628c..6c14a04 100644 --- a/AppBackup-restic.sh +++ b/AppBackup-restic.sh @@ -11,7 +11,7 @@ # AppBackup-restic.sh --appname --appuser [--apppassword ] # # Author: Charlie Silverman -# Version: 1.6 +# Version: 1.7 # # Revision History: # 1.0 - Initial version. @@ -23,6 +23,8 @@ # 1.5 - Added command-line help. # 1.6 - Replaced positional parameters with named command-line options # and added support for short/long option formats. +# 1.7 - Added email delivery of current execution log on success, +# failure, or interruption. # set -o errexit @@ -37,7 +39,7 @@ show_help() { cat << EOF -AppBackup-restic.sh v1.6 +AppBackup-restic.sh v1.7 DESCRIPTION Creates a backup of a web application's files and optionally its @@ -46,7 +48,8 @@ DESCRIPTION USAGE - AppBackup-restic.sh --appname --appuser [--apppassword ] + AppBackup-restic.sh --appname --appuser + [--apppassword ] OPTIONS @@ -76,9 +79,22 @@ EXAMPLES -a CustomerPortal \ -u portaluser -LOG FILE +LOG FILES - /tmp/AppBackup-.log + Historical Log: + /tmp/AppBackup-.log + + Current Run Log: + /tmp/AppBackup--YYYYMMDD_HHMMSS.log + +EMAIL NOTIFICATIONS + + Current execution logs are emailed to: + + ackitsme3@gmail.com + + Success, failure, and interruption events each generate + a separate email. AUTHOR @@ -86,7 +102,7 @@ AUTHOR VERSION - 1.6 + 1.7 EOF @@ -171,13 +187,44 @@ HOSTNAME_FQDN="$(hostname -f)" SAFE_APPNAME=$(echo "$AppName" | tr -cs '[:alnum:]_-' '_') LOGFILE="/tmp/AppBackup-${SAFE_APPNAME}.log" +RUNLOG="/tmp/AppBackup-${SAFE_APPNAME}-${DATE}.log" + +touch "$RUNLOG" #------------------------------------------------------------------------------ # Logging Function #------------------------------------------------------------------------------ log() { - echo "$(date '+%Y-%m-%d %H:%M:%S') [$$] $1" | tee -a "$LOGFILE" + + local msg + + msg="$(date '+%Y-%m-%d %H:%M:%S') [$$] $1" + + echo "$msg" | tee -a "$RUNLOG" +} + +#------------------------------------------------------------------------------ +# Email Function +#------------------------------------------------------------------------------ + +send_email_log() { + + local subject="$1" + + if command -v mailx >/dev/null 2>&1; then + + mailx -s "$subject" ackitsme3@gmail.com < "$RUNLOG" + + elif command -v mail >/dev/null 2>&1; then + + mail -s "$subject" ackitsme3@gmail.com < "$RUNLOG" + + else + + log "WARNING: mailx/mail command not found. Email not sent." + + fi } #------------------------------------------------------------------------------ @@ -191,6 +238,9 @@ error_handler() { log "ERROR: Backup failed on line ${line_number} with exit code ${exit_code}" + send_email_log \ + "FAILED: AppBackup ${AppName} (${HOSTNAME_FQDN})" + exit "${exit_code}" } @@ -198,6 +248,9 @@ interrupt_handler() { log "ERROR: Backup interrupted by signal" + send_email_log \ + "INTERRUPTED: AppBackup ${AppName} (${HOSTNAME_FQDN})" + exit 1 } @@ -213,7 +266,8 @@ log "Starting backup job" log "Application: $AppName" log "Application User: $AppUser" log "Host: $HOSTNAME_FQDN" -log "Log File: $LOGFILE" +log "Historical Log: $LOGFILE" +log "Run Log: $RUNLOG" log "=================================================================" #------------------------------------------------------------------------------ @@ -277,8 +331,8 @@ fi log "Removing previous backup archives" -rm -f /home/Backups/"${AppName}"*.tar.bz* -rm -f /home/Backups/"${HostPrefix}${AppName}"*.tar.bz* +rm -f /home/Backups/"${AppName}"*.tar.bz* 2>/dev/null || true +rm -f /home/Backups/"${HostPrefix}${AppName}"*.tar.bz* 2>/dev/null || true #------------------------------------------------------------------------------ # Create Archive @@ -323,7 +377,7 @@ else --tag website \ --tag "$AppName" \ --tag "$HOSTNAME_FQDN" \ - >> "$LOGFILE" 2>&1 + >> "$RUNLOG" 2>&1 log "Restic backup completed successfully" @@ -349,4 +403,25 @@ log "Backup completed successfully" log "Application: $AppName" log "Archive: ${HostPrefix}${ArchiveFile}" log "Host: $HOSTNAME_FQDN" -log "=================================================================" \ No newline at end of file +log "=================================================================" + +#------------------------------------------------------------------------------ +# Append Current Run Log To Historical Log +#------------------------------------------------------------------------------ + +cat "$RUNLOG" >> "$LOGFILE" + +#------------------------------------------------------------------------------ +# Email Current Run Log +#------------------------------------------------------------------------------ + +send_email_log \ + "SUCCESS: AppBackup ${AppName} (${HOSTNAME_FQDN})" + +#------------------------------------------------------------------------------ +# Cleanup Run Log +#------------------------------------------------------------------------------ + +rm -f "$RUNLOG" + +exit 0 \ No newline at end of file