diff --git a/templates/docker-compose/borgmatic/backup.sh b/templates/docker-compose/borgmatic/backup.sh index 182d608..102a781 100755 --- a/templates/docker-compose/borgmatic/backup.sh +++ b/templates/docker-compose/borgmatic/backup.sh @@ -5,46 +5,47 @@ # - run: create the backup, no checks # - check: prune, compact and check the backup # Anything else is an error. - + set -o pipefail - + # Set up environment -/bin/sh /scripts/msmtprc.sh +/bin/sh /scripts/msmtprc.sh /bin/sh /scripts/env.sh RUN_COMMAND="borgmatic --stats -v 2 create" CHECK_COMMAND="borgmatic --stats -v 1 prune compact check" LOGFILE="/tmp/backup_run_$(date +%s).log" SUCCESS_PREFIX="=?utf-8?Q? =E2=9C=85 SUCCESS?=" FAILED_PREFIX="=?utf-8?Q? =E2=9D=8C FAILED?=" - -PARAM="$1" - + +PARAM="$1" + # Helper function to prepend a timestamp and the first parameter to every line of STDIN -indent() { - while read -rs line; do - printf "%s%s%s\n" "$(date -Iminutes)" "${1:- }" "$line" - done -} - +indent() { + while IFS='' read -rs line; do + echo "$(date -Iminutes)${1:- }$line" + done +} + # This function prepends timestamps to stderr and stdout of the # command supplied as parameters to this. -log() { +log() { # Adapted from https://stackoverflow.com/a/31151808 { "$@" 2>&1 1>&3 3>&- | indent " ! " } 3>&1 1>&2 | indent " | " | tee -a "$LOGFILE" -} +} report() { if [ "$RESULT" = "0" ]; then - log echo "SUCCESS" + log echo "SUCCESS!" PREFIX="$SUCCESS_PREFIX" else log echo "FAILED: $RESULT" PREFIX="$FAILED_PREFIX" fi - printf "Subject: $PREFIX: '$PARAM'\n\n$(cat $LOGFILE)\n" | + printf "Subject: %s: '%s'\n\n%s\n" "$PREFIX" "$PARAM" "$(cat $LOGFILE)" | sendmail -t "$MAIL_TO" + log echo "Report sent." } testmail() { @@ -60,8 +61,9 @@ failed() { cleanup() { borgmatic break-lock - echo "Done, removing $LOGFILE" + echo "Removing $LOGFILE" rm -f "$LOGFILE" + echo "Exiting." } # Handle various kinds of exit @@ -86,9 +88,14 @@ case "$PARAM" in RESULT=$? report ;; + dummy-run) + log echo STARTED: dummy-run + borgmatic nonesuch + RESULT=$? + report + ;; *) log echo "UNKNOWN COMMAND: '$PARAM'" report ;; esac -