Borg Backup of Postgres and App
Borg backup of Advincare applicaton installed in Kumaran Medical Center infra.
#!/bin/bash
# Filename: /usr/local/sbin/borg-advincare.sh
# Backup postgres databases in directory format suitable for borg-backup
# pg_dump uses default gzip, borg uses no compression
#
# This script also integrates with healthchecks.io to indicate job status
#
# /etc/crontab entry:
# # Run a borg backup of advincare DB and files ever hour at 15 mins
# 15 * * * * root onerror /usr/local/sbin/borg-advincare.sh
PG_DUMP='/usr/bin/pg_dump'
STAGING_DIR='/srv/postgres-backup'
APP_FILE_DIR='/srv/Advincare'
BORG='/usr/local/bin/borg'
REPO='/data/local/advincare-backup'
DBNAME='advincare'
WGET='wget -O /dev/null -q'
HC_PING='http://hc.kmc.local/ping/da1d2337-fc70-457a-a235-401ca2a4d915'
# Indicate job start
${WGET} "${HC_PING}/start"
# Abort when any command fails
set -euo pipefail
echo Starting pg_dump of $DBNAME at `date`
rm -rf ${STAGING_DIR}/${DBNAME}
echo $PG_DUMP -U backup_user -h localhost -F d -f ${STAGING_DIR}/${DBNAME} ${DBNAME}
$PG_DUMP -U backup_user -h localhost -F d -f ${STAGING_DIR}/${DBNAME} ${DBNAME}
echo Completed pg_dump of $DBNAME at `date`
echo
echo
echo Starting borg create of $DBNAME and files at `date`
echo $BORG create -s -C none ${REPO}::${DBNAME}-{now} ${STAGING_DIR}/${DBNAME} ${APP_FILE_DIR}
$BORG create -s -C none ${REPO}::${DBNAME}-{now} ${STAGING_DIR}/${DBNAME} ${APP_FILE_DIR}
echo Completed borg create of $DBNAME and files at `date`
# Indicate job end
${WGET} "${HC_PING}"