#!/bin/bash echo "==========================================" echo " 追光AI 定时任务 + Bot 运行巡检" echo " $(date '+%Y-%m-%d %H:%M:%S')" echo "==========================================" echo "" echo "=== 1) PM2 进程状态 ===" pm2 list 2>&1 | head -30 echo "" echo "=== 2) 本项目 crontab 任务(按时间排) ===" crontab -l 2>/dev/null echo "" echo "=== 3) 本项目最近 5 次 PM2 重启事件 ===" pm2 show zhuiguang-ai 2>&1 | grep -E "restarts|unstable|uptime|created at|status" | head -10 echo "" echo "=== 4) 各定时任务最近 5 条日志 ===" cd /home/ubuntu/zhuiguang-ai/logs 2>/dev/null for f in task1.log task3.log task4.log task5.log task6.log task7.log daily-news.log bot-activity.log; do if [ -f "$f" ]; then sz=$(du -h "$f" | cut -f1) lines=$(wc -l < "$f") last_mod=$(stat -c '%y' "$f" 2>/dev/null | cut -d. -f1) last_line=$(tail -1 "$f" 2>/dev/null) echo " [${f}] size=${sz} lines=${lines} mtime=${last_mod}" echo " tail: ${last_line:0:150}" else echo " [${f}] MISSING" fi done echo "" echo "=== 5) Bot 相关脚本最近 3 条日志 ===" for f in bot-activity.log bot-feedback-loop.log bot-weekly-review.log bot-skill-crystallize.log bot-affinity-update.log bot-adversarial-learning.log bot-persona-experiment.log; do if [ -f "$f" ]; then last_line=$(tail -1 "$f" 2>/dev/null) last_mod=$(stat -c '%y' "$f" 2>/dev/null | cut -d. -f1) echo " [${f}] mtime=${last_mod}" echo " tail: ${last_line:0:150}" fi done echo "" echo "=== 6) 24h 内任务失败 / ERROR 关键字扫描 ===" for f in *.log; do [ -f "$f" ] || continue err=$(grep -iE 'error|失败|fatal|exception|exit code [^0]|❌|❌' "$f" 2>/dev/null | tail -3) if [ -n "$err" ]; then echo " --- ${f} ---" echo "$err" | sed 's/^/ /' fi done echo "" echo "=== 7) 数据库里的 Bot 现状 ===" mysql -h rm-0jlbgr2rv6dj3t6jngo.mysql.rds.aliyuncs.com -u mohe001 -pmohe001 zhuiguang_ai -e " SELECT (SELECT COUNT(*) FROM User WHERE isBot = 1) AS bot_users, (SELECT COUNT(*) FROM BotConfig) AS bot_configs, (SELECT COUNT(*) FROM BotConfig WHERE isActive = 1) AS active_bots, (SELECT COUNT(*) FROM ForumTopic WHERE createdAt > DATE_SUB(NOW(), INTERVAL 7 DAY)) AS topics_7d, (SELECT COUNT(*) FROM ForumPost WHERE createdAt > DATE_SUB(NOW(), INTERVAL 7 DAY)) AS posts_7d, (SELECT COUNT(*) FROM ForumTopic t JOIN User u ON t.authorId = u.id WHERE u.isBot = 1 AND t.createdAt > DATE_SUB(NOW(), INTERVAL 7 DAY)) AS bot_topics_7d, (SELECT COUNT(*) FROM ForumPost p JOIN User u ON p.authorId = u.id WHERE u.isBot = 1 AND p.createdAt > DATE_SUB(NOW(), INTERVAL 7 DAY)) AS bot_posts_7d, (SELECT COUNT(*) FROM BotAdversarialLearning) AS adv_learnings, (SELECT COUNT(*) FROM BotAdversarialLearning WHERE status = 'active') AS active_learnings, (SELECT COUNT(*) FROM BotPersonaVariant) AS persona_variants, (SELECT COUNT(*) FROM BotPersonaExperiment) AS experiments; " 2>&1 | grep -v "Warning" echo "" echo "=== 8) 最近 24h 论坛板块活跃度(按板块) ===" mysql -h rm-0jlbgr2rv6dj3t6jngo.mysql.rds.aliyuncs.com -u mohe001 -pmohe001 zhuiguang_ai -e " SELECT c.name AS 板块, c.slug AS slug, (SELECT COUNT(*) FROM ForumTopic t WHERE t.categoryId = c.id AND t.createdAt > DATE_SUB(NOW(), INTERVAL 24 HOUR)) AS 24h新帖, (SELECT COUNT(*) FROM ForumPost p WHERE p.topicId IN (SELECT id FROM ForumTopic WHERE categoryId = c.id) AND p.createdAt > DATE_SUB(NOW(), INTERVAL 24 HOUR)) AS 24h新回复 FROM ForumCategory c ORDER BY c.id; " 2>&1 | grep -v "Warning" echo "" echo "=== 9) 最近 7 天发 Bot 帖前 10 名 ===" mysql -h rm-0jlbgr2rv6dj3t6jngo.mysql.rds.aliyuncs.com -u mohe001 -pmohe001 zhuiguang_ai -e " SELECT u.name AS bot, COUNT(DISTINCT t.id) AS 发帖数, COUNT(DISTINCT p.id) AS 回复数, COALESCE(SUM(t.likeCount), 0) AS 获赞, COALESCE(SUM(t.viewCount), 0) AS 浏览 FROM User u LEFT JOIN ForumTopic t ON t.authorId = u.id AND t.createdAt > DATE_SUB(NOW(), INTERVAL 7 DAY) LEFT JOIN ForumPost p ON p.authorId = u.id AND p.createdAt > DATE_SUB(NOW(), INTERVAL 7 DAY) WHERE u.isBot = 1 GROUP BY u.id, u.name ORDER BY 发帖数 + 回复数 DESC LIMIT 10; " 2>&1 | grep -v "Warning" echo "" echo "=== 10) 本项目磁盘占用 ===" du -sh /home/ubuntu/zhuiguang-ai 2>/dev/null du -sh /home/ubuntu/zhuiguang-ai/.next 2>/dev/null du -sh /home/ubuntu/zhuiguang-ai/node_modules 2>/dev/null du -sh /home/ubuntu/zhuiguang-ai/logs 2>/dev/null echo "" echo "==========================================" echo " 巡检完成" echo "=========================================="