fix: Xvfb 管道挂死根因修复 + 日报窗口 mtime 兜底 + 翻译切换 dashscope
- domestic_crawl_8g.sh: Xvfb 启动脱离管道 fd(</dev/null + 重定向日志 + disown)。 修复 2026-09-06 事故:Xvfb 常驻进程继承 'bash crawl | tee' 管道写端, tee 永远收不到 EOF → domestic_full.sh 卡死 M1 → 日报永不生成 - scheduler/reporter.py: _load_events_window 对 'publish_time 过期' 的文件 增加 mtime 兜底(本次窗口内新翻译的事件不被低质量 publish_time 误伤)。 修复空日报:date-only/美式日期错位的 publish_time 使窗口 articles=0 - configs/system.yaml: M4 翻译 provider 切换 deepseek → dashscope(qwen3.7-flash), 降低翻译成本(输出单价约降 ~9 倍);daily_report 保持 deepseek 不变
This commit is contained in:
+6
-3
@@ -23,6 +23,8 @@ crawler:
|
||||
source_timeout_sec: 7200 # 单源超时秒数(2h)
|
||||
article_delay_sec: 3.0 # 文章间冷却间隔
|
||||
page_timeout_sec: 45 # 单页加载超时
|
||||
http_timeout_sec: 30 # 轻量 HTTP 抓全文单页超时(秒)
|
||||
http_min_html_len: 2000 # 判定 HTTP 拿到正文的最小 HTML 长度
|
||||
viewport_width: 1024
|
||||
viewport_height: 768
|
||||
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
|
||||
@@ -45,7 +47,7 @@ dedup:
|
||||
llm:
|
||||
provider: "deepseek"
|
||||
deepseek_model: "deepseek-v4-flash"
|
||||
qwen_model: "qwen-plus"
|
||||
qwen_model: "qwen3.7-flash"
|
||||
timeout_sec: 60
|
||||
max_attempts: 3 # 单篇总尝试次数(含首次),失败后指数退避重试
|
||||
max_tokens: 8192
|
||||
@@ -58,8 +60,9 @@ llm:
|
||||
llm_scenes:
|
||||
translation:
|
||||
# M4:全文英译中 + 投资事件抽取(单次 LLM 调用合并输出)
|
||||
provider: "deepseek"
|
||||
model: "deepseek-v4-flash"
|
||||
#provider: "deepseek"
|
||||
provider: "dashscope"
|
||||
model: "qwen3.7-flash"
|
||||
temperature: 0.1
|
||||
max_tokens: 8192
|
||||
description: |
|
||||
|
||||
+11
-1
@@ -243,7 +243,17 @@ def _load_events_window(now: datetime) -> list[dict]:
|
||||
continue
|
||||
|
||||
if pt < cutoff:
|
||||
continue
|
||||
# publish_time 质量兜底:部分源(zerohedge/cnbc 等)publish_time
|
||||
# 仅日期(按 00:00 UTC 处理)或美式日期错位(如 09/05 → 5 月 9 日)。
|
||||
# 这类文章在报告非 07:00 运行时易被 25h 窗口误伤。若事件文件本身
|
||||
# 是窗口内新生成的(mtime ≥ cutoff,即本次管道刚翻译),予以保留。
|
||||
# (2026-09-06 空日报事故教训:窗口 articles=0 → AI 摘要为空)
|
||||
try:
|
||||
mtime = datetime.fromtimestamp(fp.stat().st_mtime, tz=UTC)
|
||||
except OSError:
|
||||
mtime = None
|
||||
if mtime is None or mtime < cutoff:
|
||||
continue
|
||||
articles.append(data)
|
||||
except (json.JSONDecodeError, OSError):
|
||||
pass
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#
|
||||
# 前置条件:
|
||||
# sudo apt install xvfb
|
||||
# Xvfb :99 -screen 0 1280x1024x24 & # 首次启动
|
||||
# Xvfb :99 -screen 0 1280x1024x24 </dev/null >> logs/xvfb.log 2>&1 & # 首次启动
|
||||
# HTTP 代理 127.0.0.1:3128 已运行(privoxy)
|
||||
#
|
||||
# 用法:
|
||||
@@ -40,9 +40,16 @@ if [ -f .env ]; then
|
||||
fi
|
||||
|
||||
# ── 启动 Xvfb(如果尚未运行)──
|
||||
# ⚠️ Xvfb 的 stdin/stdout/stderr 必须脱离本脚本的 fd 并重定向到日志文件:
|
||||
# 本脚本常被 `bash xx.sh | tee` 管道包裹调用(domestic_full.sh),而 Xvfb
|
||||
# 是常驻进程(设计为跨运行复用)。若它继承了管道写端,抓取脚本退出后
|
||||
# tee 仍永远收不到 EOF → domestic_full.sh 卡在 M1 → [2/2] 管道与日报
|
||||
# 永不执行(2026-09-06 早报缺失事故根因)。
|
||||
if ! pgrep -x "Xvfb" > /dev/null; then
|
||||
LOG "启动 Xvfb 虚拟显示器 :99 ..."
|
||||
Xvfb :99 -screen 0 1280x1024x24 -ac +extension RANDR &
|
||||
mkdir -p logs
|
||||
Xvfb :99 -screen 0 1280x1024x24 -ac +extension RANDR </dev/null >> logs/xvfb.log 2>&1 &
|
||||
disown 2>/dev/null || true
|
||||
sleep 1
|
||||
LOG "Xvfb 已启动 (PID: $(pgrep -x Xvfb))"
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user