#!/bin/sh # JJServiceManagerRelay DB 백업 — 매일 BACKUP_HOUR시에 pg_dump, 최근 BACKUP_KEEP개 보관 # 수동 백업: sudo docker exec jjsm-backup /bin/sh /backup.sh now KEEP="${BACKUP_KEEP:-30}" HOUR="${BACKUP_HOUR:-3}" run_backup() { ts=$(date +%Y%m%d-%H%M%S) file="/backup/jjsm-$ts.sql.gz" if pg_dump --no-owner --no-privileges | gzip -9 > "$file.tmp"; then mv "$file.tmp" "$file" echo "$(date '+%F %T') 백업 완료: $file ($(du -h "$file" | cut -f1))" else rm -f "$file.tmp" echo "$(date '+%F %T') 백업 실패" >&2 return 1 fi # 오래된 백업 파일 정리 (최근 KEEP개만 남김) ls -1t /backup/jjsm-*.sql.gz 2>/dev/null | tail -n +$((KEEP + 1)) | while read -r old; do rm -f "$old" && echo "$(date '+%F %T') 오래된 백업 정리: $old" done } if [ "$1" = "now" ]; then run_backup exit $? fi echo "$(date '+%F %T') 백업 대기 시작 (매일 ${HOUR}시, ${KEEP}개 보관)" until pg_isready -q; do sleep 5; done last="" while true; do today=$(date +%F) if [ "$(date +%H | sed 's/^0//')" = "$HOUR" ] && [ "$last" != "$today" ]; then run_backup && last="$today" fi sleep 60 done