122 lines
3.2 KiB
Bash
Executable File
122 lines
3.2 KiB
Bash
Executable File
#!/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
|