Files
openclaw-backups/scripts/session-backup.sh

37 lines
1.0 KiB
Bash
Executable File

#!/bin/bash
# Session Backup Cron - Runs every 15 minutes
# Backs up active session files to workspace for Gitea backup
set -e
SESSION_DIR="$HOME/.openclaw/agents/main/sessions"
BACKUP_DIR="$HOME/.openclaw/workspace/sessions"
LOG_FILE="$HOME/.openclaw/workspace/logs/session-backup.log"
# Ensure directories exist
mkdir -p "$BACKUP_DIR"
mkdir -p "$(dirname "$LOG_FILE")"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Find the most recent active session
LATEST_SESSION=$(ls -t "$SESSION_DIR"/*.jsonl 2>/dev/null | grep -v ".reset." | head -1)
if [[ -z "$LATEST_SESSION" ]]; then
log "No active session found"
exit 0
fi
# Copy to backup with timestamp
SESSION_NAME=$(basename "$LATEST_SESSION")
BACKUP_NAME="${SESSION_NAME%.jsonl}-$(date +%H%M).jsonl"
cp "$LATEST_SESSION" "$BACKUP_DIR/$BACKUP_NAME"
# Keep only last 20 backups to save space
ls -t "$BACKUP_DIR"/*.jsonl 2>/dev/null | tail -n +21 | xargs -r rm -f
log "Backed up: $SESSION_NAME -> $BACKUP_NAME ($(stat -c%s "$LATEST_SESSION" | numfmt --to=iec))"