#!/bin/bash # sport_harvest_backup.sh — pre-cron pg_dump of harvest tables # v1.0 — dradulic@outlook.com / damir@rinet.one — 2026-05-05 # Description: Backups 4 ključne pgz_sport tablice prije sport harvester cron cikla. # Pokreće ga /etc/cron.d/sport-harvesters u 02:50 svaki 2. dan. set -u DSN_HOST="${RINET_DB_HOST:-10.10.0.2}" DSN_PORT="${RINET_DB_PORT:-6432}" DSN_DB="${RINET_DB_NAME:-rinet_v3}" DSN_USER="${RINET_DB_USER:-rinet}" DSN_PASS="${RINET_DB_PASS:-R1net2026!SecureDB#v7}" BACKUP_DIR="/opt/pgz-sport/_backups" LOG_DIR="/var/log/pgz-sport-debug" DATE_TAG="$(date +%Y%m%d_%H%M)" DATE_DAY="$(date +%Y%m%d)" OUT_FILE="${BACKUP_DIR}/sport_harvest_pre_${DATE_TAG}.sql" LOG_FILE="${LOG_DIR}/cron_backup_${DATE_DAY}.log" mkdir -p "${BACKUP_DIR}" "${LOG_DIR}" { echo "[$(date -Is)] sport_harvest_backup START → ${OUT_FILE}" PGPASSWORD="${DSN_PASS}" pg_dump \ -h "${DSN_HOST}" -p "${DSN_PORT}" -U "${DSN_USER}" -d "${DSN_DB}" \ --no-owner --no-privileges --data-only \ -t pgz_sport.clanovi \ -t pgz_sport.klub_roster \ -t pgz_sport.player_stats \ -t pgz_sport.clan_kategorije \ -f "${OUT_FILE}" RC=$? if [ "${RC}" -eq 0 ] && [ -s "${OUT_FILE}" ]; then SIZE=$(stat -c%s "${OUT_FILE}") echo "[$(date -Is)] OK rc=${RC} size=${SIZE}B" else echo "[$(date -Is)] FAIL rc=${RC} (file empty or pg_dump error)" exit 1 fi # Retencija: zadrži 14 dana find "${BACKUP_DIR}" -maxdepth 1 -name 'sport_harvest_pre_*.sql' -mtime +14 -print -delete echo "[$(date -Is)] retention swept (>14d)" echo "[$(date -Is)] sport_harvest_backup DONE" } >> "${LOG_FILE}" 2>&1