#!/bin/bash # # 每日故障报告生成脚本 # 用途: 每天生成故障统计和工作总结 # REPORT_FILE="/var/log/openclaw/daily-report.log" ALERT_LOG="/var/log/openclaw-monitor/alerts.log" DATE=$(date +%Y-%m-%d) echo "========================================" >> "$REPORT_FILE" echo "每日故障报告 - $DATE" >> "$REPORT_FILE" echo "========================================" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 1. 故障统计 (修复 grep -c 多行问题) echo "【故障统计】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" CRITICAL=$(grep "$DATE.*CRITICAL" "$ALERT_LOG" 2>/dev/null | wc -l || echo "0") ALERT=$(grep "$DATE.*ALERT" "$ALERT_LOG" 2>/dev/null | wc -l || echo "0") AUTO=$(grep "$DATE.*AUTO" "$ALERT_LOG" 2>/dev/null | wc -l || echo "0") echo "CRITICAL: $CRITICAL 条" >> "$REPORT_FILE" echo "ALERT: $ALERT 条" >> "$REPORT_FILE" echo "AUTO: $AUTO 条" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 2. 系统状态 echo "【系统状态】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" if pgrep -f "openclaw-gateway" > /dev/null; then echo "Gateway: 运行中" >> "$REPORT_FILE" else echo "Gateway: 未运行" >> "$REPORT_FILE" fi MEM_USAGE=$(free -h | grep Mem | awk '{print $3 "/" $2}') echo "内存: $MEM_USAGE" >> "$REPORT_FILE" DISK_USAGE=$(df -h / | tail -1 | awk '{print $5 " used"}') echo "磁盘: $DISK_USAGE" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 3. 记忆系统状态 echo "【记忆系统】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" DB="/root/.openclaw/workspace/memory/memory.db" if [ -f "$DB" ]; then USER_MEM=$(sqlite3 "$DB" "SELECT COUNT(*) FROM memories WHERE layer='user'" 2>/dev/null || echo "0") SESSION_MEM=$(sqlite3 "$DB" "SELECT COUNT(*) FROM memories WHERE layer='session'" 2>/dev/null || echo "0") AGENT_MEM=$(sqlite3 "$DB" "SELECT COUNT(*) FROM memories WHERE layer='agent'" 2>/dev/null || echo "0") INSIGHTS=$(sqlite3 "$DB" "SELECT COUNT(*) FROM insights" 2>/dev/null || echo "0") echo "User Memory: $USER_MEM 条" >> "$REPORT_FILE" echo "Session Memory: $SESSION_MEM 条" >> "$REPORT_FILE" echo "Agent Memory: $AGENT_MEM 条" >> "$REPORT_FILE" echo "Insights: $INSIGHTS 条" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" # 4. 计划任务状态 echo "【计划任务】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" openclaw cron list 2>/dev/null | grep -E "ok|idle" | head -5 >> "$REPORT_FILE" || echo "无任务" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 5. 总结 echo "【总结】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" TOTAL=$((CRITICAL + ALERT + AUTO)) if [ "$TOTAL" -lt 10 ]; then echo "系统运行正常,故障较少。" >> "$REPORT_FILE" elif [ "$TOTAL" -lt 50 ]; then echo "系统运行一般,存在一定数量的告警。" >> "$REPORT_FILE" else echo "系统运行需关注,故障数量较多。" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" echo "报告生成完成: $REPORT_FILE"