#!/bin/bash # # # # Fail fast and be aware of exit codes set -euo pipefail # Define some variables DATE=$(date +%F) DATE_TIME=$(date +%F_%H:%M) REMOTE_SYSTEM_USER=backupuser DATABASE_SERVER_IP=$1 STAGE=$2 DATABASE_ENGINE=$3 DEST_DIR=${HOME}/backups/${STAGE}/${DATABASE_ENGINE} BACKUP_STATUS_FILE=${DEST_DIR}/${DATE}/backup_finished_${DATE}_* METRICS_FILE=${HOME}/backup_status_${DATABASE_ENGINE}.prom LOG_FILE=${DEST_DIR}/backup_${DATE_TIME}.log # Redirect stderr to stdout and save everything to log file exec > ${LOG_FILE} 2>&1 # Log backup sync start time echo "----- Start backup Sync - ${DATE_TIME} -----" # Create backup directory ${DEST_DIR} if not exist mkdir -p ${DEST_DIR} # Remove files oder than 48h in ${DEST_DIR} find $DEST_DIR -type d -mtime +1 -print0 | xargs -I OLD_DIR -0 rm -rf "OLD_DIR" [ "$?" != "0" ] && exit 1 # Start rsync job from ${DATABASE_SERVER_IP} to ${DEST_DIR}/ rsync -av --remove-source-files -e "ssh -o StrictHostKeyChecking=no" ${REMOTE_SYSTEM_USER}@${DATABASE_SERVER_IP}:/backups/${DATABASE_ENGINE}/ ${DEST_DIR}/ [ "$?" -eq "0" ] && NIGHTLY_BACKUP_SUCCESSFUL="0" || NIGHTLY_BACKUP_SUCCESSFUL="1" # Check existence of current ${BACKUP_STATUS_FILE}, which is created by AWX, in case of succesful database backup only. [ -f ${BACKUP_STATUS_FILE} ] && NIGHTLY_BACKUP_SUCCESSFUL="0" || NIGHTLY_BACKUP_SUCCESSFUL="1" # Add backup status to Prometheus metrics file cat < $METRICS_FILE # HELP nightly_backup_successful_${DATABASE_ENGINE} # TYPE nightly_backup_successful_${DATABASE_ENGINE} gauge nightly_backup_successful_${DATABASE_ENGINE}{stage="$STAGE"} $NIGHTLY_BACKUP_SUCCESSFUL EOF # Log backup sync end time echo "----- End backup Sync - ${DATE_TIME} -----"