每日备份 2026-06-10 12:57:13

This commit is contained in:
root-backup committed 2026-06-10 12:57:14 +08:00
1 parent fda2ccb8c2
commit 3d2e638c6a
244 files changed
+58890 -3

No files matched your search

+82
View File
@@ -0,0 +1,82 @@
#!/bin/bash
# 会话隔离管理器
# 功能: 自动归档和清理旧会话,防止会话文件冲突
# 策略: 文件超过2小时未更新 = 已完成 = 归档
SESSION_DIR="/root/.openclaw/agents/main/sessions"
ARCHIVE_DIR="/root/.openclaw/agents/main/sessions-archive"
MAX_SESSION_AGE_HOURS=2
echo "=== 会话隔离管理 $(date) ==="
# 创建归档目录
mkdir -p "$ARCHIVE_DIR"
# 1. 归档超过2小时未更新的会话
echo "1. 归档超过${MAX_SESSION_AGE_HOURS}小时未更新的会话..."
current_time=$(date +%s)
archived_count=0
# 获取会话文件列表
session_files=($SESSION_DIR/*.jsonl)
for session in "${session_files[@]}"; do
[ -f "$session" ] || continue
# 获取文件名
filename=$(basename "$session")
# 跳过主会话 (agent:main)
if [[ "$filename" == *"18095fa2"* ]]; then
continue
fi
# 获取文件修改时间
mtime=$(stat -c %Y "$session" 2>/dev/null)
[ -z "$mtime" ] && continue
# 计算时间差(小时)
age_hours=$(( (current_time - mtime) / 3600 ))
# 超过2小时未更新,归档
if [ "$age_hours" -ge "$MAX_SESSION_AGE_HOURS" ]; then
mv "$session" "$ARCHIVE_DIR/" 2>/dev/null
echo " 归档: $filename (${age_hours}h未更新)"
((archived_count++))
fi
done
echo " 已归档 $archived_count 个会话"
# 2. 清理归档目录中超过3天的会话
echo ""
echo "2. 清理归档目录中超过3天的会话..."
find "$ARCHIVE_DIR" -name "*.jsonl" -type f -mtime +3 -delete 2>/dev/null
find "$ARCHIVE_DIR" -name "*.jsonl.gz" -type f -mtime +3 -delete 2>/dev/null
# 3. 压缩超大会话文件 (>10MB)
echo ""
echo "3. 压缩超大会话..."
for session in "$SESSION_DIR"/*.jsonl; do
[ -f "$session" ] || continue
size_mb=$(du -m "$session" 2>/dev/null | cut -f1)
if [ "$size_mb" -gt 10 ] 2>/dev/null; then
gzip -k "$session" 2>/dev/null
echo " 已压缩: $(basename "$session") (${size_mb}MB)"
fi
done
# 4. 清理锁文件
echo ""
echo "4. 清理过期锁文件..."
find "$SESSION_DIR" -name "*.lock" -type f -mmin +60 -delete 2>/dev/null
# 5. 统计
echo ""
echo "=== 当前状态 ==="
echo "活跃会话: $(ls $SESSION_DIR/*.jsonl 2>/dev/null | wc -l)"
echo "归档会话: $(ls $ARCHIVE_DIR/*.jsonl 2>/dev/null | wc -l)"
echo "归档压缩: $(ls $ARCHIVE_DIR/*.jsonl.gz 2>/dev/null | wc -l)"
echo ""
echo "完成!"