diff --git a/btrbk-cron b/btrbk-cron index fd280f1..c96fab6 100755 --- a/btrbk-cron +++ b/btrbk-cron @@ -4,8 +4,11 @@ CONF=/etc/btrbk/btrbk-cron.conf LOGFILE=$(mktemp) trap 'rm -f -- "${LOGFILE}"' EXIT +echo "---" | tee -a "${LOGFILE}" +echo "Start btrbk-cron: $(date||true)" | tee -a "${LOGFILE}" + if [[ ! -f "${CONF}" ]] ; then - echo "Warning: Can't read config file (${CONF}), healthchecks disabled." + echo "Warning: Can't read config file (${CONF}), healthchecks disabled." | tee -a "${LOGFILE}" else # shellcheck disable=SC1090,SC1091 source "${CONF}" @@ -16,10 +19,37 @@ HEALTHCHECK_ENABLE=${HEALTHCHECK_ENABLE:-false} CURLOPTS=(-fsS -m 10 --retry 5) if [[ ! -d /run/btrbk ]] ; then + echo "Warning: Creating missing directory: /run/btrbk " | tee -a "${LOGFILE}" mkdir -p /run/btrbk fi -echo "---" | tee -a "${LOGFILE}" +if [[ "${HEALTHCHECK_ENABLE}" = "true" ]] ; then + echo "Info: Healthchecks enabled with URL: ${HEALTHCHECK_URL}" +else + echo "Info: Healthchecks disabled" +fi + +HOST=$(grep -E '^[\ \t]*target[\ \t]+send-receive' /etc/btrbk/btrbk.conf) +# TODO: support for dashes in hostname and IPv6 ("[2001:db8::7]") +HOST=$(echo "${HOST}" | sed -r 's/.*ssh:\/\/([0-9\.a-zA-Z]+).*/\1/g' ) + +IDENTITYFILE=$(grep -E '^[\ \t]*ssh_identity[\ \t].*' /etc/btrbk/btrbk.conf ) +IDENTITYFILE=$(echo "${IDENTITYFILE}" | sed -r 's/.*ssh_identity[\ \t]+//g') + +SSHUSER=$(grep -E '^[\ \t]*ssh_user[\ \t].*' /etc/btrbk/btrbk.conf ) +SSHUSER=$(echo "${SSHUSER}" | sed -r 's/.*ssh_user[\ \t]+//g') + +SSH_OK=$(ssh -i "${IDENTITYFILE}" "${SSHUSER}@${HOST}" "which btrfs") + +if [[ "${SSH_OK}" = "" ]] ; then + echo "Warning: exiting because of backup destination unreachable" | tee -a "${LOGFILE}" + if [[ "${HEALTHCHECK_ENABLE}" = "true" ]] ; then + curl "${CURLOPTS[@]}" --data-binary "@${LOGFILE}" "${HEALTHCHECK_URL}/log" + fi + rm -f -- "${LOGFILE}" + exit 1 +fi + echo "Start backup: $(date||true)" | tee -a "${LOGFILE}" if [[ "${HEALTHCHECK_ENABLE}" = "true" ]] ; then curl "${CURLOPTS[@]}" "${HEALTHCHECK_URL}/start"