每日备份 2026-06-10 12:57:13
This commit is contained in:
1 parent
fda2ccb8c2
commit
3d2e638c6a
244 files changed
+58890
-3
No files matched your search
Executable
+82
@@ -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 "完成!"
|
||||
Reference in new issue
Block a user