Refine SQLite hot-backup to cleanly mirror subdirectories and remove lockfiles

This commit is contained in:
jschantli committed 2026-09-04 20:52:08 -07:00
1 parent 7875ef0bc2
commit 2527045bc6
1 file changed
+15 -10
+15 -10
View File
@@ -141,17 +141,22 @@ if [ -d "$P_DIR" ]; then
fi
echo "--- Performing zero-lock hot-backup of SQLite databases on VPS ---"
# Search in P_DIR, P_DIR/config, and $(dirname P_DIR)
for search_path in "$P_DIR" "$P_DIR/config" "$(dirname "$P_DIR")"; do
if [ -d "$search_path" ]; then
for db in $(find "$search_path" -maxdepth 2 -name "*.db" -o -name "*.sqlite" 2>/dev/null); do
dbname=$(basename "$db")
echo "Hot-backing up database: $dbname (source: $db)..."
mkdir -p "{remote_stage}/pangolin/config"
sqlite3 "$db" ".backup '{remote_stage}/pangolin/config/$dbname'" 2>/dev/null || cp -v "$db" "{remote_stage}/pangolin/config/$dbname"
done
fi
if [ -d "$P_DIR/config" ]; then
TARGET_BASE="{remote_stage}/pangolin/config"
SEARCH_BASE="$P_DIR/config"
else
TARGET_BASE="{remote_stage}/pangolin"
SEARCH_BASE="$P_DIR"
fi
for db in $(find "$SEARCH_BASE" -maxdepth 4 -name "*.db" -o -name "*.sqlite" 2>/dev/null); do
rel=$(realpath --relative-to="$SEARCH_BASE" "$db")
mkdir -p "$TARGET_BASE/$(dirname "$rel")"
echo "Hot-backing up SQLite database: $rel..."
sqlite3 "$db" ".backup '$TARGET_BASE/$rel'" 2>/dev/null || cp -v "$db" "$TARGET_BASE/$rel"
done
# Clean dangling lock/WAL files in staging archive
find "" -name "*.db-wal" -delete -o -name "*.db-shm" -delete 2>/dev/null || true
# Backup any named Docker volumes attached to pangolin containers
for vol in $(docker inspect --format '{{{{range .Mounts}}}}{{{{if eq .Type "volume"}}}}{{{{.Source}}}}{{{{"\\n"}}}}{{{{end}}}}{{{{end}}}}' $(docker ps -aq --filter "name=pangolin" 2>/dev/null) 2>/dev/null); do