95 lines
2.5 KiB
Bash
Executable File
95 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# Run the backup and mail the logs:
|
|
# Depending on parameter 1:
|
|
# - test-smtp: just send a test email to $MAIL_TO
|
|
# - 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/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"
|
|
|
|
# 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
|
|
}
|
|
|
|
# This function prepends timestamps to stderr and stdout of the
|
|
# command supplied as parameters to this.
|
|
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"
|
|
PREFIX="$SUCCESS_PREFIX"
|
|
else
|
|
log echo "FAILED: $RESULT"
|
|
PREFIX="$FAILED_PREFIX"
|
|
fi
|
|
printf "Subject: $PREFIX: '$PARAM'\n\n$(cat $LOGFILE)\n" |
|
|
sendmail -t "$MAIL_TO"
|
|
}
|
|
|
|
testmail() {
|
|
echo -e "Subject: TESTING!\n\ntest mail, please ignore\n" |
|
|
sendmail -t "$MAIL_TO"
|
|
}
|
|
|
|
failed() {
|
|
log echo "Exited abnormally!"
|
|
report
|
|
rm -f "$LOGFILE"
|
|
}
|
|
|
|
cleanup() {
|
|
borgmatic break-lock
|
|
echo "Done, removing $LOGFILE"
|
|
rm -f "$LOGFILE"
|
|
}
|
|
|
|
# Handle various kinds of exit
|
|
trap failed INT QUIT KILL
|
|
trap cleanup EXIT
|
|
|
|
case "$PARAM" in
|
|
test-smtp)
|
|
echo "Testing mail to $MAIL_TO"
|
|
testmail
|
|
echo "Done."
|
|
;;
|
|
check)
|
|
log echo STARTED: $CHECK_COMMAND
|
|
log $CHECK_COMMAND
|
|
RESULT=$?
|
|
report
|
|
;;
|
|
run)
|
|
log echo STARTED: $RUN_COMMAND
|
|
log $RUN_COMMAND
|
|
RESULT=$?
|
|
report
|
|
;;
|
|
*)
|
|
log echo "UNKNOWN COMMAND: '$PARAM'"
|
|
report
|
|
;;
|
|
esac
|
|
|