37 lines
1.0 KiB
Bash
Executable File
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))"
|