Files
ATOCore/deploy/dalidou/cron-backup.sh
Anto01 0b1742770a feat: cleanup endpoint, auto-extraction on capture, daily cron script
- POST /admin/backup/cleanup — retention cleanup via API (dry-run by default)
- record_interaction() accepts extract=True to auto-extract candidate
  memories from response text using the Phase 9C rule-based extractor
- POST /interactions accepts extract field to enable extraction on capture
- deploy/dalidou/cron-backup.sh — daily backup + cleanup for cron

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 10:28:32 -04:00

57 lines
1.8 KiB
Bash

#!/usr/bin/env bash
#
# deploy/dalidou/cron-backup.sh
# ------------------------------
# Daily backup + retention cleanup via the AtoCore API.
#
# Intended to run from cron on Dalidou:
#
# # Daily at 03:00 UTC
# 0 3 * * * /srv/storage/atocore/app/deploy/dalidou/cron-backup.sh >> /var/log/atocore-backup.log 2>&1
#
# What it does:
# 1. Creates a runtime backup (db + registry, no chroma by default)
# 2. Runs retention cleanup with --confirm to delete old snapshots
# 3. Logs results to stdout (captured by cron into the log file)
#
# Fail-open: exits 0 even on API errors so cron doesn't send noise
# emails. Check /var/log/atocore-backup.log for diagnostics.
#
# Environment variables:
# ATOCORE_URL default http://127.0.0.1:8100
# ATOCORE_BACKUP_CHROMA default false (set to "true" for cold chroma copy)
set -euo pipefail
ATOCORE_URL="${ATOCORE_URL:-http://127.0.0.1:8100}"
INCLUDE_CHROMA="${ATOCORE_BACKUP_CHROMA:-false}"
TIMESTAMP="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
log() { printf '[%s] %s\n' "$TIMESTAMP" "$*"; }
log "=== AtoCore daily backup starting ==="
# Step 1: Create backup
log "Step 1: creating backup (chroma=$INCLUDE_CHROMA)"
BACKUP_RESULT=$(curl -sf -X POST \
-H "Content-Type: application/json" \
-d "{\"include_chroma\": $INCLUDE_CHROMA}" \
"$ATOCORE_URL/admin/backup" 2>&1) || {
log "ERROR: backup creation failed: $BACKUP_RESULT"
exit 0
}
log "Backup created: $BACKUP_RESULT"
# Step 2: Retention cleanup (confirm=true to actually delete)
log "Step 2: running retention cleanup"
CLEANUP_RESULT=$(curl -sf -X POST \
-H "Content-Type: application/json" \
-d '{"confirm": true}' \
"$ATOCORE_URL/admin/backup/cleanup" 2>&1) || {
log "ERROR: cleanup failed: $CLEANUP_RESULT"
exit 0
}
log "Cleanup result: $CLEANUP_RESULT"
log "=== AtoCore daily backup complete ==="