20 lines
819 B
Bash
20 lines
819 B
Bash
|
|
#!/bin/bash
|
||
|
|
# Daily backup via Pythons sqlite3.backup() — atomar, async-DB-safe,
|
||
|
|
# kein sqlite3-CLI im Container vorausgesetzt.
|
||
|
|
set -euo pipefail
|
||
|
|
TS=$(date +%Y%m%d-%H%M%S)
|
||
|
|
BACKUP_DIR=/opt/gwoe-antragspruefer/backups
|
||
|
|
mkdir -p $BACKUP_DIR
|
||
|
|
docker exec gwoe-antragspruefer python -c "
|
||
|
|
import sqlite3
|
||
|
|
src = sqlite3.connect(\"/app/data/gwoe-antraege.db\")
|
||
|
|
dst = sqlite3.connect(\"/tmp/db-backup.db\")
|
||
|
|
src.backup(dst); dst.close(); src.close()
|
||
|
|
" 2>&1
|
||
|
|
docker cp gwoe-antragspruefer:/tmp/db-backup.db $BACKUP_DIR/gwoe-antraege-$TS.db
|
||
|
|
docker exec gwoe-antragspruefer rm /tmp/db-backup.db
|
||
|
|
gzip -9 $BACKUP_DIR/gwoe-antraege-$TS.db
|
||
|
|
find $BACKUP_DIR -name "gwoe-antraege-*.db.gz" -mtime +30 \
|
||
|
|
! -name "gwoe-antraege-*01-*.db.gz" -delete 2>/dev/null || true
|
||
|
|
echo "$(date -Iseconds) backup ok: $BACKUP_DIR/gwoe-antraege-$TS.db.gz"
|