Skip to content

Commit

Permalink
Implemented a simple mail notification after backups using mailx. Thi…
Browse files Browse the repository at this point in the history
…s can be used to send mail via an external SMTP server. Syntax uniformity is questionable.
  • Loading branch information
mrclschstr authored and niondir committed Jul 25, 2019
1 parent 7ed9080 commit 29e46ca
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ FROM alpine:3.10.1
COPY --from=build /etc/ssl/certs /etc/ssl/certs
COPY --from=build /bin/restic /bin/restic

RUN apk add --update --no-cache fuse openssh-client
RUN apk add --update --no-cache fuse openssh-client heirloom-mailx

RUN \
mkdir -p /mnt/restic /var/spool/cron/crontabs /var/log; \
Expand All @@ -25,6 +25,7 @@ ENV \
BACKUP_CRON="0 */6 * * *" \
RESTIC_FORGET_ARGS="" \
RESTIC_JOB_ARGS=""
MAILX_ARGS=""

# /data is the dir where you have to put the data to be backed up
VOLUME /data
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ docker logs
```
Shows `/var/log/cron.log`

Additionally you can see the the full log, including restic output, of the last execution in `/var/log/backup-last.log`. When the backup fails the log is copied to `/var/log/restic-error-last.log`.
Additionally you can see the the full log, including restic output, of the last execution in `/var/log/backup-last.log`. When the backup fails the log is copied to `/var/log/restic-error-last.log`. If configured, you can find the full output of the mail notification in `/var/log/mail-last.log`.

# Customize the Container

Expand All @@ -77,6 +77,7 @@ The container is setup by setting [environment variables](https://docs.docker.co
* `RESTIC_JOB_ARGS` - Optional. Allows to specify extra arguments to the back up job such as limiting bandwith with `--limit-upload` or excluding file masks with `--exclude`.
* `AWS_ACCESS_KEY_ID` - Optional. When using restic with AWS S3 storage.
* `AWS_SECRET_ACCESS_KEY` - Optional. When using restic with AWS S3 storage.
* `MAILX_ARGS` - Optional. If specified, the content of `/var/log/backup-last.log` is sent via mail after each backup using an *external SMTP*. To have maximum flexibility, you have to specify the mail/smtp parameters by your own. Have a look at the [mailx manpage](https://linux.die.net/man/1/mailx) for further information. Example value: `-e "MAILX_ARGS=-r 'from@example.de' -s 'Result of the last restic backup run' -S smtp='smtp.example.com:587' -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user='username' -S smtp-auth-password='password' 'to@example.com'"`.

## Volumes

Expand Down
12 changes: 11 additions & 1 deletion backup.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/sh

lastLogfile="/var/log/backup-last.log"
lastMailLogfile="/var/log/mail-last.log"

copyErrorLog() {
cp ${lastLogfile} /var/log/backup-error-last.log
Expand All @@ -11,7 +12,7 @@ logLast() {
}

start=`date +%s`
rm -f ${lastLogfile}
rm -f ${lastLogfile} ${lastMailLogfile}
echo "Starting Backup at $(date +"%Y-%m-%d %H:%M:%S")"
echo "Starting Backup at $(date)" >> ${lastLogfile}
logLast "BACKUP_CRON: ${BACKUP_CRON}"
Expand Down Expand Up @@ -50,3 +51,12 @@ fi

end=`date +%s`
echo "Finished Backup at $(date +"%Y-%m-%d %H:%M:%S") after $((end-start)) seconds"

if [ -n "${MAILX_ARGS}" ]; then
sh -c "mailx -v -S sendwait ${MAILX_ARGS} < ${lastLogfile} > ${lastMailLogfile} 2>&1"
if [ $? == 0 ]; then
echo "Mail notification successfully sent."
else
echo "Sending mail notification FAILED. Check ${lastMailLogfile} for further information."
fi
fi

0 comments on commit 29e46ca

Please sign in to comment.