#!/bin/sh CONFIG=/etc/pgbasebackup.conf if [ ! -f "$CONFIG" ] ; then echo "Config file $CONFIG not exist!" exit 1 fi . "$CONFIG" remove_full() { echo -n `date '+%Y-%m-%d %H:%M:%S'` echo -n " Removing backup..." rm -fR "$BACKUP_PATH/db/" if [ "$?" -eq "0" ] ; then echo " done" else echo " failed" exit 2 fi } create_full() { echo -n `date '+%Y-%m-%d %H:%M:%S'` echo -n " Doing full backup..." mkdir "$BACKUP_PATH/db/" \ && pg_basebackup -D "$BACKUP_PATH/db/" 2> "$BACKUP_PATH/log" if [ "$?" -eq "0" ] ; then echo " done" else echo " failed" exit 3 fi } send_archive() { echo -n `date '+%Y-%m-%d %H:%M:%S'` echo -n " Archiving to remote storage..." tar -cSf - -C "$BACKUP_PATH" db \ | pigz $PIGZ_OPTIONS \ | ssh -i "$RKEY" $RUSER@$RSERVER "dd of=$RPATH 2>/dev/null" if [ "$?" -eq "0" ] ; then echo " done" else echo " failed" exit 4 fi } save_archive() { S=`date '+%Y%m%d'` echo -n `date '+%Y-%m-%d %H:%M:%S'` echo -n " Archiving..." tar -cSjf "$BACKUP_PATH/db_${S}.tbz" -C "$BACKUP_PATH" db if [ "$?" -eq "0" ] ; then echo " done" else echo " failed" exit 5 fi } remove_old_archives() { echo -n `date '+%Y-%m-%d %H:%M:%S'` echo -n " Remove old archives..." FULL_LIST=`find "$BACKUP_PATH" -type f -name "db_*.tbz" | sort` NEED_LIST=`echo "$FULL_LIST" | tail -n "$DAYS"` (echo "$FULL_LIST" ; echo "$NEED_LIST") \ | sort \ | uniq -u \ | xargs -r rm echo " done" } remove_full create_full REPLICA=`echo "SELECT COUNT(*) FROM pg_stat_wal_receiver;" | psql -qt` if [ -n "$RUSER" -a -n "$RSERVER" -a -n "$RPATH" -a -n "$RKEY" -a "$REPLICA" -gt "0" ] ; then send_archive elif [ "$DAYS" -gt 0 ] ; then save_archive remove_old_archives fi echo -n `date '+%Y-%m-%d %H:%M:%S'` echo " Finished"