83 lines
2.4 KiB
Bash
Executable File
83 lines
2.4 KiB
Bash
Executable File
#!/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 "完成!"
|