diff --git a/.borg-env.example b/.borg-env.example index 044901e..8f6fba6 100644 --- a/.borg-env.example +++ b/.borg-env.example @@ -9,7 +9,16 @@ export BORG_RSH="ssh -i $HOME/.ssh/id_ed25519" export BORG_REPO="ssh://borguser@borgserver.com:22/~/backups/$USER/$HOST" # See the section "Passphrase notes" for more infos. -export BORG_PASSPHRASE='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' +export BORG_PASSPHRASE="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # This array must containing everything you want to include in the backup export BORG_TARGETS=("$HOME") + +# [optional] Use a ntfy service to publish backup results +# export NTFY=true + +# [optional] ntfy url with topic +# export NTFY_URL="https://ntfy.sh/myborgbackup" + +# [optional] ntfy token +# export NTFY_TOKEN="tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ No newline at end of file diff --git a/README.md b/README.md index 73590ea..99b7c63 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,14 @@ nano $HOME/.borg-env - Set a strong passphrase - Define everything you want to include in your backup as an **absolute path** in the `BORG_TARGETS` array +### Publish backup result via _nfty_ + +You can use a [_ntfy_](https://docs.ntfy.sh/) instance to publish the result of your backup process to a _ntfy_ topic. Just set the corresponding environment variables in the `.borg-env`: + +- Set `NTFY` to `true` +- Set `NTFY_URL` to the URL of your preferred _ntfy_ instance including the desired topic, e.g. `"https://ntfy.sh/myborgbackup"` +- Set your _ntfy_ token if necessary + Make the script executable. ```bash diff --git a/borgbackup.sh b/borgbackup.sh index abc74d1..48eb92a 100755 --- a/borgbackup.sh +++ b/borgbackup.sh @@ -16,6 +16,33 @@ info() { echo "$( date ) BORGBACKUP $* " >> /var/log/backup.log; } +# function to send ntfy messages +ntfy() { + local message="$1" + local priority="$2" + local ntfy_url="${NTFY_URL}" + local ntfy_token="${NTFY_TOKEN}" + + if [ -z "${ntfy_url}" ]; then + info "NTFY_URL is not set. Cannot send notification." + return + fi + + # construct curl command with or without token + if [ -z "${ntfy_token}" ]; then + local curl_command="curl -H 'Priority: ${priority}' -d '${message}' '${ntfy_url}'" + else + local curl_command="curl -H 'Authorization: Bearer ${ntfy_token}' -H 'Priority: ${priority}' -d '${message}' '${ntfy_url}'" + fi + + # send curl and log result + if eval "${curl_command}"; then + info "Notification sent successfully: ${message}" + else + info "Failed to send notification: ${message}" + fi +} + trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM info "Starting backup" @@ -75,9 +102,18 @@ fi if [ ${global_exit} -eq 0 ]; then info "Borg Backups finished successfully" + if [ "${NTFY}" = "true" ]; then + ntfy "${HOSTNAME}: Borg Backups finished successfully" "low" + fi elif [ ${global_exit} -eq 1 ]; then info "Borg Backups finished with warnings" + if [ "${NTFY}" = "true" ]; then + ntfy "${HOSTNAME}: Borg Backups finished with warnings" "urgent" + fi else info "Borg Backups finished with errors" + if [ "${NTFY}" = "true" ]; then + ntfy "${HOSTNAME}: Borg Backups finished with errors" "urgent" + fi fi exit ${global_exit}