#!/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))"