40 lines
1.2 KiB
Bash
Executable File
40 lines
1.2 KiB
Bash
Executable File
#!/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
|