- domestic_full.sh / pipeline.sh 新增 --no-report 参数:跳过日报生成, 保持 M1 抓取 + M2→M6 管道不变,用于 12:00/18:00 只抓不生成日报 - crontab: 07:00 全量含日报,12:00/18:00 --no-report(日报每日一次,降低 LLM 费用) - docs/llm-models.md: 各 LLM 调用点分别用的 provider/model 事实清单 - docs/llm-cost-analysis.md: 真实 token 消耗与费用构成、降本建议 - docs/llm-cache-optimization.md: DeepSeek 上下文缓存机制与命中率提升设计 - docs/README.md 增加上述三个文档索引
86 lines
3.1 KiB
Bash
Executable File
86 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# =============================================
|
||
# 国内服务器:全流程自动化(独立运行,无需海外)
|
||
# 1. M1 Pi 抓取(headful Playwright + HTTP 代理)
|
||
# 2. 全链路 M2→M6(含日报)
|
||
# =============================================
|
||
# 每天 06:00 / 12:00 / 18:00 / 22:00 各执行一次
|
||
# =============================================
|
||
# 用法:
|
||
# ./scripts/domestic_full.sh # 全新执行(含日报)
|
||
# ./scripts/domestic_full.sh --resume # 从中断处继续(跳过已完成步骤,
|
||
# # 步骤状态见 data/run_state/{date}.state)
|
||
# ./scripts/domestic_full.sh --no-report # 只抓取 + M2→M6,跳过日报生成
|
||
# ./scripts/domestic_full.sh --no-report --resume
|
||
# =============================================
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||
cd "$PROJECT_DIR"
|
||
|
||
# ── 参数解析 ──
|
||
RESUME=0
|
||
NO_REPORT=0
|
||
for arg in "$@"; do
|
||
case "$arg" in
|
||
--resume) RESUME=1 ;;
|
||
--no-report) NO_REPORT=1 ;;
|
||
*) echo "未知参数: ${arg}(支持 --resume / --no-report)" >&2; exit 1 ;;
|
||
esac
|
||
done
|
||
|
||
source "$SCRIPT_DIR/_step_state.sh"
|
||
|
||
LOG() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
|
||
|
||
# ── 全流程日志:所有输出实时显示到终端,同时完整写入日志文件 ──
|
||
LOG_DIR="logs"
|
||
mkdir -p "$LOG_DIR"
|
||
FULL_LOG="$LOG_DIR/domestic_full_$(date +%Y%m%d_%H%M%S).log"
|
||
: > "$FULL_LOG"
|
||
|
||
LOG "══════ 国内全流程开始(resume=${RESUME} no_report=${NO_REPORT})═══════"
|
||
LOG "全流程日志: ${FULL_LOG}(终端实时显示完整进度)"
|
||
|
||
# ── 加载 .env ──
|
||
if [ -f .env ]; then
|
||
set -a
|
||
. ./.env
|
||
set +a
|
||
fi
|
||
|
||
# ── 1. M1 Pi 抓取(headful Playwright + HTTP 代理)──
|
||
# 部分源抓取失败不阻塞管道(原语义);抓取本身按 URL 去重(index.jsonl),
|
||
# 已抓取过的 URL 不会重复写入;输出实时显示每源进度
|
||
# 只有 M1 脚本成功退出(即不是“全部源失败”)才标记完成;
|
||
# 若全部源失败,不标记,--resume 可重新抓取。
|
||
M1_FAILED=0
|
||
if step_should_run M1_crawl; then
|
||
LOG "━━━ [1/2] M1 抓取(headful Playwright + HTTP 代理)━━━"
|
||
if bash "$SCRIPT_DIR/domestic_crawl_8g.sh" 2>&1 | tee -a "$FULL_LOG"; then
|
||
step_mark M1_crawl
|
||
else
|
||
LOG "WARNING: M1 抓取未完全成功,本次不标记 M1_crawl,--resume 可重试"
|
||
M1_FAILED=1
|
||
fi
|
||
fi
|
||
|
||
# ── 2. M2→M6 管道(+ 可选日报)──
|
||
if [ "$NO_REPORT" = "1" ]; then
|
||
LOG "━━━ [2/2] M2→M6 管道(已跳过日报,--no-report)━━━"
|
||
else
|
||
LOG "━━━ [2/2] M2→M6 管道 + 日报 ━━━"
|
||
fi
|
||
PIPELINE_ARGS=""
|
||
[ "$RESUME" = "1" ] && PIPELINE_ARGS="$PIPELINE_ARGS --resume"
|
||
[ "$NO_REPORT" = "1" ] && PIPELINE_ARGS="$PIPELINE_ARGS --no-report"
|
||
bash "$SCRIPT_DIR/pipeline.sh" $PIPELINE_ARGS 2>&1 | tee -a "$FULL_LOG"
|
||
|
||
if [ "$M1_FAILED" -eq 1 ]; then
|
||
LOG "⚠️ 全流程结束,但 M1 抓取未成功,退出码=1"
|
||
exit 1
|
||
fi
|
||
|
||
LOG "══════ 国内全流程完成 ✅ ══════"
|