结合win系统的codex app 和 WSL 中的 Codex CLI 做一个可定时执行的新闻日报系统
项目文件:
通过网盘分享的文件:new_report_daliy
链接: https://pan.baidu.com/s/1z9ekfSULRT4nKZw09JUOXw?pwd=9eyu 提取码: 9eyu
--来自百度网盘超级会员v5的分享
注:当前文章由ai生成
背景
这次我想实现的目标很明确:
- 每天定时检索和 AI、科技、国际关系相关的新闻
- 自动整理成中文 Markdown 日报
- 把文件保存到本地目录
- 尽可能给每个栏目补一张本地图片
一开始尝试的是 Codex app 自带的自动化能力,但实际测试下来,任务虽然会更新调度时间,真正的执行记录和文件产出却没有稳定落地。后来改成了一个更可控的方案:
- 用 Windows 计划任务做定时调度
- 用 PowerShell 作为启动器
- 用 WSL 里的 Ubuntu 22.04 执行 Codex CLI
- 再由 Windows 脚本补做本地图片下载和 Markdown 回填
这个方案的优点是路径清晰、日志明确、失败点可查,而且不依赖桌面版 Codex app 的内置自动化是否稳定。
最终目录结构
项目目前和这套日报自动化直接相关的文件主要有这些:
AI_design/
├─ daily_news_reports/
│ ├─ 2026-03-19.md
│ └─ images/
│ └─ 2026-03-19/
│ ├─ ai.png
│ ├─ tech.png
│ └─ world.png
├─ logs/
│ └─ daily_news_codex/
├─ scripts/
│ ├─ powershell/
│ │ ├─ install_daily_news_task.ps1
│ │ ├─ run_daily_news_with_wsl_codex.ps1
│ │ └─ test_news_codex_runner.ps1
│ └─ prompts/
│ └─ daily_news_codex_prompt.txt
└─ blog_posts/
└─ codex-wsl-daily-news-automation/
└─ README.md
为了让项目更干净,我还顺手删除了之前遗留在 scripts 目录里的周报、Word、PPT 相关旧脚本,只保留这次日报系统真正需要的内容。
整体执行流程
整个流程可以概括成下面这条链路:
Windows Task Scheduler
-> powershell.exe
-> run_daily_news_with_wsl_codex.ps1
-> wsl.exe
-> Ubuntu-22.04 / bash
-> codex --search exec
-> 生成 Markdown 日报
-> PowerShell 下载本地图片并回填 Markdown
它不是靠 Windows “自动发现脚本然后执行”,而是因为系统里已经注册了一条计划任务。到了指定时间,Windows 的任务计划程序服务会自动拉起 powershell.exe,再由 PowerShell 去执行脚本。
Windows 为什么会自动执行这些脚本
原因其实很简单:因为我已经把任务正式注册进了 Windows 计划任务系统。
安装脚本 install_daily_news_task.ps1 做的事主要是:
- 指定要执行的脚本是
run_daily_news_with_wsl_codex.ps1 - 创建一个“每天 18:00”触发的定时任务
- 把这个任务注册为
DailyNewsWithWSLCodex
核心逻辑大致是:
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`""
$trigger = New-ScheduledTaskTrigger -Daily -At $Time
Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Settings $settings -Force
也就是说,Windows 自动执行脚本的根本原因,不是脚本本身有什么“开机自启魔法”,而是任务计划程序在后台记住了:
- 什么时候运行
- 运行哪个命令
- 用哪个用户身份运行
到点后,它会主动启动:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\heisuo\project\AI_design\scripts\powershell\run_daily_news_with_wsl_codex.ps1"
运行脚本做了什么
run_daily_news_with_wsl_codex.ps1 是整个系统的核心。
它主要完成了下面几步:
- 计算项目根目录、日报目录、图片目录、日志目录、prompt 模板路径
- 根据当天日期生成一个临时 prompt 文件
- 把 Windows 路径转换成 WSL 可识别的
/mnt/c/...路径 - 调用
wsl.exe进入Ubuntu-22.04 - 在 Ubuntu 里执行
codex --search exec - 等 Codex 把日报 Markdown 写到本地后,再读取这个 Markdown
- 提取
AI、科技、国际关系三个栏目中的首个来源链接 - 根据来源域名下载对应站点图标到本地
- 把本地图片路径插回 Markdown 对应栏目下面
- 把本次执行过程写入日志
这一步里最重要的一条命令是:
codex --search exec --skip-git-repo-check --color never --full-auto -C '<workspace>' - < '<prompt-file>'
这表示让 Codex 在指定工作区中,按照 prompt 文件里的要求,自动检索信息并直接产出结果。
为什么改成 WSL 里的 Codex CLI
原因是桌面版 Codex app 的本地自动化在这台机器上没有稳定跑通,而 WSL 里的 Codex CLI 已经验证可用:
- Ubuntu 22.04 存在
codex命令存在- 已登录到 ChatGPT
- 能直接在 Windows 挂载目录里写文件
相比之下,Windows 侧直接调用本机 Codex 程序时遇到了权限问题,命令行入口不够稳定,所以最后选择了“Windows 调度,WSL 执行”的组合。
配图是怎么实现的
配图不是交给 Codex 在云端下载完成的,而是由本地 PowerShell 做后处理。
原因是:
- WSL 中的下载能力在这个环境里不稳定
- 但 Windows 侧
Invoke-WebRequest可以正常下载部分资源
因此最后采用了一个稳妥的折中方案:
- 先让 Codex 只生成日报正文,并在三个栏目下保留
IMAGE_PENDING - 脚本在日报生成后,再读取 Markdown 内容
- 提取每个栏目中的首个新闻来源 URL
- 取该域名对应的站点图标
- 把图标下载到本地目录
- 用本地图片路径替换掉占位符
目前下载的是每个栏目一张图,位置类似:
daily_news_reports/images/2026-03-19/ai.png
daily_news_reports/images/2026-03-19/tech.png
daily_news_reports/images/2026-03-19/world.png
Markdown 中插入的是本地相对路径,例如:
## AI

这套方案的重点不是“图片多精美”,而是“保证每天都能稳定生成本地配图文件”。如果以后要升级,也可以继续往真正的新闻缩略图或更高质量封面图方向做。
现在的自动执行状态
当前这套系统已经注册了一个 Windows 计划任务:
- 任务名:
DailyNewsWithWSLCodex - 频率:每天
- 时间:18:00
- 运行用户:
Administrator - 当前模式:
Interactive only
这意味着:
- 电脑开着,且该用户已登录桌面时,到 18:00 会自动运行
- 它不是“开机就运行”
- 它也不是“关机后自动补跑”
- 它当前更接近“登录态下的定时任务”
所以如果有人问“它会不会自动执行”,答案是:
- 会,它会按计划时间自动执行
- 但不是开机自动执行
- 也不是无论是否登录都运行
“无论是否登录都运行”为什么没有直接启用
理论上,Windows 计划任务支持“无论用户是否登录都运行”的模式,但这个项目里还额外跨了一层:
PowerShell -> WSL -> Ubuntu -> Codex CLI
这时候真正的不确定性不在任务计划程序本身,而在后台非交互会话中:
wsl.exe是否能正常启动目标发行版- Ubuntu 中的用户环境是否完整
codex的登录状态是否在非交互模式下依旧可用
也就是说,对普通脚本来说,这种模式常常更稳;但对“调用 WSL 里的 Codex CLI”这种链路来说,还是需要单独验证,不能想当然地直接启用。
日志和验证
为了避免“看起来像跑了,其实没产出”的情况,这套方案加了几层验证:
- 自检脚本
test_news_codex_runner.ps1 - 执行日志目录
logs/daily_news_codex/ - 真实报告目录
daily_news_reports/ - 本地图片目录
daily_news_reports/images/<date>/
只要一次执行成功,通常会同时看到三类结果:
- 生成了一份新的 Markdown 日报
- 生成了对应日期的本地图片文件
- 日志中记录了 WSL 调用和图片下载信息
这比单纯依赖 Codex app 的自动化状态要清晰得多。
这套方案的优点
- 调度端稳定,依赖 Windows 自带任务计划程序
- 执行链路清楚,哪一步失败都比较容易定位
- 产物全部落在本地,方便归档和二次处理
- 不依赖 OpenAI API key
- 继续利用了 Codex 的检索和写作能力
这套方案的局限
- 目前配图还是以站点图标为主,视觉效果一般
- 任务当前依赖登录态,不是彻底的后台无人值守模式
- 控制台里中文显示有时会乱码,但文件本身通常是正常的
- 如果 WSL 登录态或 Codex CLI 环境变化,任务也会受影响
如果后续继续优化
后面如果继续迭代,我会优先考虑这几个方向:
- 把计划任务升级成“错过时间后补跑”
- 测试“无论是否登录都运行”的后台模式
- 提升图片质量,尽量从站点图标升级为真实新闻配图
- 优化 Markdown 标题和中文编码处理
- 给日报增加更统一的版式和摘要格式
总结
这次最后落地的不是 Codex app 原生自动化,而是一套更实用的替代方案:
- 用 Windows 负责定时
- 用 WSL 负责运行 Codex CLI
- 用 PowerShell 负责本地文件、日志和图片下载
从工程角度看,这样的分层更容易控制,也更容易解释“为什么会自动执行”。Windows 自动执行这些脚本,不是因为脚本本身特殊,而是因为系统的任务计划程序在指定时间主动调用了它们。
如果只是想做一个每天固定时间生成本地新闻日报的系统,这套方案已经能跑起来,而且产物、日志、目录结构都比较清楚,适合作为一个实用型自动化案例。
Comments NOTHING