| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| ENV_FILE="${ENV_FILE:-/etc/polymarket-collector.env}" |
| if [[ -f "$ENV_FILE" ]]; then |
| set -a |
| |
| source "$ENV_FILE" |
| set +a |
| fi |
|
|
| DATA_DIR="${DATA_DIR:-/var/lib/polymarket-collector}" |
| RCLONE_REMOTE="${RCLONE_REMOTE:-}" |
| LOCAL_RETENTION_DAYS="${LOCAL_RETENTION_DAYS:-0}" |
| REMOVE_AFTER_UPLOAD="${REMOVE_AFTER_UPLOAD:-false}" |
| BACKUP_MIN_AGE="${BACKUP_MIN_AGE:-2m}" |
|
|
| if [[ -z "$RCLONE_REMOTE" ]]; then |
| echo "RCLONE_REMOTE is empty; backup is not configured." |
| exit 0 |
| fi |
| if [[ ! -d "$DATA_DIR" ]]; then |
| echo "Data directory does not exist: $DATA_DIR" >&2 |
| exit 1 |
| fi |
| if ! [[ "$LOCAL_RETENTION_DAYS" =~ ^[0-9]+$ ]]; then |
| echo "LOCAL_RETENTION_DAYS must be a non-negative integer." >&2 |
| exit 1 |
| fi |
|
|
| case "${REMOVE_AFTER_UPLOAD,,}" in |
| 1|true|yes) RCLONE_ACTION="move" ;; |
| 0|false|no) RCLONE_ACTION="copy" ;; |
| *) |
| echo "REMOVE_AFTER_UPLOAD must be true or false." >&2 |
| exit 1 |
| ;; |
| esac |
|
|
| LOCK_FILE="${BACKUP_LOCK_FILE:-/tmp/polymarket-backup.lock}" |
| exec 9>"$LOCK_FILE" |
| flock -n 9 || exit 0 |
|
|
| rclone "$RCLONE_ACTION" "$DATA_DIR" "$RCLONE_REMOTE" \ |
| --include "*.jsonl.gz" \ |
| --min-age "$BACKUP_MIN_AGE" \ |
| --checksum \ |
| --transfers 2 \ |
| --checkers 4 \ |
| --retries 3 \ |
| --low-level-retries 10 \ |
| --create-empty-src-dirs |
|
|
| if (( LOCAL_RETENTION_DAYS > 0 )); then |
| find "$DATA_DIR" -type f -name "*.jsonl.gz" \ |
| -mtime "+$LOCAL_RETENTION_DAYS" -delete |
| fi |
|
|