#!/bin/bash # # Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one # or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. . /usr/sbin/so-common TODAY=$(date '+%Y_%m_%d') BACKUPDIR=/nsm/backup BACKUPFILE="$BACKUPDIR/so-postgres-backup-$TODAY.sql.gz" MAXBACKUPS=7 mkdir -p $BACKUPDIR # Skip if already backed up today if [ -f "$BACKUPFILE" ]; then exit 0 fi # Skip if container isn't running if ! docker ps --format '{{.Names}}' | grep -q '^so-postgres$'; then exit 0 fi # Dump all databases and roles, compress docker exec so-postgres pg_dumpall -U postgres | gzip > "$BACKUPFILE" # Retention cleanup NUMBACKUPS=$(find $BACKUPDIR -type f -name "so-postgres-backup*" | wc -l) while [ "$NUMBACKUPS" -gt "$MAXBACKUPS" ]; do OLDEST=$(find $BACKUPDIR -type f -name "so-postgres-backup*" -printf '%T+ %p\n' | sort | head -n 1 | awk -F" " '{print $2}') rm -f "$OLDEST" NUMBACKUPS=$(find $BACKUPDIR -type f -name "so-postgres-backup*" | wc -l) done