Een script om bij mislukte backups een bericht via Telegram te versturen.
In het script bij de TO_FILL vermeldingen de bot id / api key en chatroom invullen.
Bij SERVICE_NAME kan je eventueel een eigen waarde invullen als je meerdere duplicati instances hebt en deze herkenbaar wil kunnen terugzien. (Servernaam bijv.)
Zie hieronder, bovenste melding standaard, die eronder met SERVICE_NAME="VPS"

Script
#!/bin/bash
#
# Script Configuration.
DEBUG_MODE="0"
SCRIPT_FULLFN="$(basename "${0}")"
LOGFILE="/var/log/${SCRIPT_FULLFN%.*}.log"
LOG_MAX_LINES="1000"
SERVICE_NAME="Duplicati"
#
#
# -----------------
# --- Functions ---
# -----------------
logAdd ()
{
TMP_DATETIME="$(date '+%Y-%m-%d [%H-%M-%S]')"
TMP_LOGSTREAM="$(tail -n ${LOG_MAX_LINES} ${LOGFILE} 2>/dev/null)"
echo "${TMP_LOGSTREAM}" > "$LOGFILE"
if [ "$1" == "-q" ]; then
#
# Quiet mode.
#
echo "${TMP_DATETIME} ${@:2}" >> "${LOGFILE}"
else
#
# Loud mode.
#
echo "${TMP_DATETIME} $*" | tee -a "${LOGFILE}"
fi
return
}
sendTelegramNotification ()
{
#
# Usage: sendTelegramNotification "<PN_TEXT>"
# Example: sendTelegramNotification "Test push message"
#
# Returns:
#
# - "0" on FAILURE.
# - "1" on SUCCESS.
#
# Consts.
CURL_BIN="curl"
CURL_TIMEOUT="3"
#
# Telegram Bot
STN_TELEGRAM_BOT_ID="TO_FILL"
STN_TELEGRAM_BOT_APIKEY="TO_FILL"
#
# cf
STN_TELEGRAM_CHAT_ID="TO_FILL"
#
# Variables.
#
STN_TEXT="$1"
STN_TEXT="${STN_TEXT//\"/\\\"}"
#
# Log message.
#
if [ "${DEBUG_MODE}" == "1" ]; then
logAdd -q "${MY_SERVICE_NAME}::sendTelegramNotification() fired."
fi
#
# Send push message to Telegram Bot Chat.
if ( eval ${CURL_BIN} -q \
--insecure \
--max-time \""${CURL_TIMEOUT}\"" \
"\"https://api.telegram.org/bot${STN_TELEGRAM_BOT_ID}:${STN_TELEGRAM_BOT_APIKEY}/sendMessage?chat_id=${STN_TELEGRAM_CHAT_ID}&text=${STN_TEXT}\"" \
2> /dev/null \| grep -Fiq "\"ok\\\":true\"" ); then
#
# Log message.
logAdd -q "${MY_SERVICE_NAME}::sendTelegramNotification: ... SUCCESS."
# Return SUCCESS.
#
echo -n "1"
else
#
# Log message.
logAdd -q "${MY_SERVICE_NAME}::sendTelegramNotification: ... FAILED."
#
# Return FAILURE.
echo -n "0"
fi
#
return
}
# -----------------------------------------------------
# --------------- END OF FUNCTION BLOCK ---------------
# -----------------------------------------------------
#
# Script Main.
#
# Validate env vars we got from Duplicati.
if [ -z "${DUPLICATI__backup_name}" ]; then
export DUPLICATI__backup_name="API_ERR"
fi
#
if [ -z "${DUPLICATI__PARSED_RESULT}" ]; then
export DUPLICATI__PARSED_RESULT="API_ERR"
fi
#
if [ -z "${DUPLICATI__EVENTNAME}" ]; then
export DUPLICATI__EVENTNAME="API_ERR"
fi
#
if [ -z "${DUPLICATI__OPERATIONNAME}" ]; then
export DUPLICATI__OPERATIONNAME="API_ERR"
fi
#
if [ "${DEBUG_MODE}" == "1" ]; then
env | grep "DUPLICATI__"
fi
#
# Prepare chat message.
CHAT_MESSAGE="${SERVICE_NAME}: \"${DUPLICATI__backup_name}\" ${DUPLICATI__PARSED_RESULT} ${DUPLICATI__EVENTNAME} ${DUPLICATI__OPERATIONNAME}"
#
# Do not send chat message on SUCCESS.
if [ "${DUPLICATI__PARSED_RESULT}" == "Success" ]; then
logAdd "[INFO] Suppressed sending chat message [${CHAT_MESSAGE}]."
exit 0
fi
logAdd "[INFO] Sending chat message [${CHAT_MESSAGE}] ..."
#
# Send chat message.
SEND_RESULT="$(sendTelegramNotification "${CHAT_MESSAGE}")"
if [ "${SEND_RESULT}" == "0" ]; then
logAdd "[ERROR] Failed to send telegram notification."
exit 99
fi
#
logAdd "[INFO] Successfully sent telegram notification."
exit 0
Implementatie
Duplicati direct als linux service
Plaats bovenstaande script op een locatie op je server. In dit geval heb ik deze als
/opt/duplicati-notify/sendTelegramNotification geplaatst.
Dan is het het handigste als je dit systeembreed instelt. Mocht je het alleen voor 1 bepaalde taak willen dan kan dat ook. Dan plaats je hem onder het kopje options bij de taak configuratie en dan Advanced options.
Voor systeembrede configuratie ga je naar Settings en dan helemaal naar onderen scrollen naar de sectie default options.
Add advanced option en selecteer run-script-after. Vul hierna het pad in van het script en klik op OK.

Duplicati als docker container
Onder de docker container moet het script bereikbaar zijn vanuit de container. Dit kan je eventueel doen door bij aanmaken container het script direct 1-op-1 te mappen naar de host en dan het pad in te vullen zoals bij de voorgaande stap.
Voeg dus een optie als de volgende toe
-v /pad/op/host/sendTelegramNotification:/opt/duplicati-notify/sendTelegramNotification
Testen
Dit script stuurt alleen een bericht als een backup een error of warning geeft. Om te testen of het uberhaupt werkt zonder je backups kapot te maken moet je de volgende 3 regels uitcommenten door er een hekje voor te plaatsen.
if [ "${DUPLICATI__PARSED_RESULT}" == "Success" ]; then
logAdd "[INFO] Suppressed sending chat message [${CHAT_MESSAGE}]."
exit 0
fi
dit wordt dan
#if [ "${DUPLICATI__PARSED_RESULT}" == "Success" ]; then
# logAdd "[INFO] Suppressed sending chat message [${CHAT_MESSAGE}]."
# exit 0
#fi
Vergeet niet om na afloop weer de hekjes weg te halen anders krijg je elke keer een melding.
Bron: duplicati forum