每天早上 9 点,一份包含长江干线水位、三峡过闸动态和气象要素的 Word 日报,会准时出现在我的工作目录里。这件事我让机器干了半年,今天把整套流水线拆开讲讲。

整体架构

$ tree daily-report/
daily-report/
├── fetch_weather.py    # 抓气象数据(风/雾/强对流)
├── fetch_lock.py       # 抓三峡-葛洲坝过闸动态
├── render_docx.py      # python-docx 渲染 Word
└── run.sh              # cron 入口

原则很简单:抓取 → 清洗 → 渲染 → 落盘,每一步独立成模块,任何一步挂了不影响前面已完成的产物。

cron 配置

# 每天 09:00 执行,日志追加到 report.log
0 9 * * * cd /opt/daily-report && ./run.sh >> report.log 2>&1
坑:cron 的 PATH 和登录 shell 不一致,脚本里务必用绝对路径调用 python 解释器。

几点经验

第一,气象数据源要准备至少两个,主源超时立刻切备用,日报不能因为接口抖动而开天窗。第二,Word 渲染用 python-docx 足够,别上重型方案。第三,落盘文件名带日期:航运日报-YYYY-MM-DD.docx,方便归档和检索。

把重复劳动交给机器,人只负责审阅和判断——这才是自动化的意义。