每日备份 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

+121
View File
@@ -0,0 +1,121 @@
#!/bin/bash
# 1号机任务检查脚本
# 定时检查任务队列,自动执行学习任务
TASK_QUEUE="/root/.openclaw/workspace/memory/task_queue.txt"
LEARN_SCRIPT="/root/.openclaw/tools/learn-workflow.sh"
REPORT_DIR="/root/.openclaw/workspace/memory/reports"
LOG_FILE="/root/.openclaw/workspace/memory/task.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
mkdir -p "$REPORT_DIR"
echo "=== 任务检查: $DATE ===" >> "$LOG_FILE"
# 检查任务队列是否存在
if [ ! -f "$TASK_QUEUE" ]; then
echo "队列文件不存在" >> "$LOG_FILE"
exit 0
fi
# 当前时间戳
NOW=$(date +%s)
# 读取并执行到期任务
TEMP_FILE=$(mktemp)
COMPLETED_FILE=$(mktemp)
REPORT_FILE="$REPORT_DIR/$(date '+%Y%m%d_%H%M%S').report"
# 开始报告
{
echo "任务执行报告"
echo "时间: $DATE"
echo "================"
} > "$REPORT_FILE"
# 读取并执行到期任务
while IFS= read -r line; do
# 跳过注释和空行
[[ "$line" =~ ^#.*$ ]] && continue
[[ -z "$line" ]] && continue
# 解析: 时间|主题|类型|数量
TIMESTAMP=$(echo "$line" | cut -d'|' -f1)
TOPIC=$(echo "$line" | cut -d'|' -f2)
TYPE=$(echo "$line" | cut -d'|' -f3)
COUNT=$(echo "$line" | cut -d'|' -f4)
# 转换时间为秒
TASK_SECONDS=$(date -d "$TIMESTAMP" +%s 2>/dev/null)
if [ -z "$TASK_SECONDS" ]; then
echo " ⚠️ 无效时间格式: $TIMESTAMP"
echo "[跳过] $TIMESTAMP | $TOPIC | 无效时间格式" >> "$REPORT_FILE"
continue
fi
# 检查是否到期
if [ "$TASK_SECONDS" -le "$NOW" ]; then
echo "执行: $TOPIC ($TYPE) x$COUNT" >> "$LOG_FILE"
echo "- 任务: $TOPIC" >> "$REPORT_FILE"
echo " 类型: $TYPE" >> "$REPORT_FILE"
echo " 数量: $COUNT" >> "$REPORT_FILE"
echo " 状态: " >> "$REPORT_FILE"
# 执行学习任务
TASK_LOG=$(mktemp)
if "$LEARN_SCRIPT" "$TOPIC" "$TYPE" "$COUNT" >> "$TASK_LOG" 2>&1; then
echo " ✓ 完成: $TOPIC" >> "$LOG_FILE"
echo " 完成" >> "$REPORT_FILE"
# 记录到已完成
echo "$line" >> "$COMPLETED_FILE"
else
echo " ✗ 失败: $TOPIC" >> "$LOG_FILE"
echo " 失败 (保留重试)" >> "$REPORT_FILE"
# 保留到下一轮
echo "$line" >> "$TEMP_FILE"
fi
# 追加任务日志
echo " 日志:" >> "$REPORT_FILE"
sed 's/^/ /' "$TASK_LOG" >> "$REPORT_FILE"
rm -f "$TASK_LOG"
else
# 未到期,保留
echo "$line" >> "$TEMP_FILE"
fi
done < "$TASK_QUEUE"
# 结束报告
{
echo "================"
echo "完成: $(date '+%Y-%m-%d %H:%M:%S')"
} >> "$REPORT_FILE"
# 更新任务队列
if [ -f "$COMPLETED_FILE" ]; then
# 添加已完成标记
echo "" >> "$COMPLETED_FILE"
echo "# 完成于: $DATE" >> "$COMPLETED_FILE"
cat "$COMPLETED_FILE" >> "$TASK_QUEUE.completed"
fi
if [ -f "$TEMP_FILE" ] && [ -s "$TEMP_FILE" ]; then
mv "$TEMP_FILE" "$TASK_QUEUE"
else
rm -f "$TASK_QUEUE"
fi
# 清理
rm -f "$COMPLETED_FILE"
# 清理旧报告 (保留最近3天)
find "$REPORT_DIR" -name "*.report" -mtime +3 -delete
echo "检查完成: $(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
# 显示报告摘要
if [ -f "$REPORT_FILE" ]; then
LINES=$(wc -l < "$REPORT_FILE")
echo "报告: $REPORT_FILE ($LINES 行)"
fi