Read .env settings tolerantly, and check the files folder first
The backup script missed DATA_DIR when the line carried an export prefix, quotes, padding or a CR, and silently fell back to ./data — dumping first and only then discovering there was nothing to mirror. It now strips all that, prints the paths it's using, and stops before writing anything if the files folder isn't there. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
22645f139a
commit
217671a5ef
1 changed files with 15 additions and 5 deletions
|
|
@ -14,12 +14,17 @@ set -euo pipefail
|
|||
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# A setting from the environment, else from .env, else the fallback. Tolerates
|
||||
# "export NAME=", quotes, spaces and Windows line endings.
|
||||
setting() { # name, fallback
|
||||
local from_env="${!1:-}"
|
||||
if [ -n "$from_env" ]; then echo "$from_env"; return; fi
|
||||
if [ -f .env ]; then
|
||||
local line
|
||||
line="$(grep -E "^$1=" .env | tail -1 | cut -d= -f2-)"
|
||||
line="$(sed -e 's/\r$//' .env \
|
||||
| grep -E "^[[:space:]]*(export[[:space:]]+)?$1[[:space:]]*=" \
|
||||
| tail -1 | cut -d= -f2- \
|
||||
| sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/^"\(.*\)"$/\1/' -e "s/^'\(.*\)'$/\1/")"
|
||||
if [ -n "$line" ]; then echo "$line"; return; fi
|
||||
fi
|
||||
echo "$2"
|
||||
|
|
@ -30,6 +35,15 @@ DATA_DIR="$(setting DATA_DIR ./data)"
|
|||
KEEP_DAYS="$(setting KEEP_DAYS 14)"
|
||||
stamp="$(date +%Y-%m-%d)"
|
||||
|
||||
echo "$(date '+%F %T') data: $DATA_DIR → backups: $BACKUP_DIR"
|
||||
|
||||
# Checked before anything is written: on an external disk that isn't mounted,
|
||||
# the folder is simply missing, and a backup of nothing is worse than none.
|
||||
if [ ! -d "$DATA_DIR/uploads" ]; then
|
||||
echo "$(date '+%F %T') FAILED: no $DATA_DIR/uploads — is the disk mounted, and is DATA_DIR set in .env?" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$BACKUP_DIR/db"
|
||||
|
||||
# --- the database -----------------------------------------------------------
|
||||
|
|
@ -62,9 +76,5 @@ find "$BACKUP_DIR/db" -name 'printhive-*.dump' -type f -mtime "+$KEEP_DAYS" -del
|
|||
# --- the model files --------------------------------------------------------
|
||||
# A mirror, not a history: it matches what's there now, deletions included.
|
||||
# Thumbnails, previews and extracted archives are left out — they rebuild.
|
||||
if [ ! -d "$DATA_DIR/uploads" ]; then
|
||||
echo "$(date '+%F %T') FAILED: no $DATA_DIR/uploads — is the disk mounted?" >&2
|
||||
exit 1
|
||||
fi
|
||||
rsync -a --delete "$DATA_DIR/uploads/" "$BACKUP_DIR/uploads/"
|
||||
echo "$(date '+%F %T') files → $BACKUP_DIR/uploads ($(du -sh "$BACKUP_DIR/uploads" | cut -f1))"
|
||||
|
|
|
|||
Loading…
Reference in a new issue