Codex 定时任务怎么落地?先跑通技能再安排每日检查流程

编程狮(w3cschool.cn) 2026-09-10 11:17:02 浏览数 (31)
反馈

Codex 定时任务应先把一次手动检查跑通,再配置执行时间、项目位置和结果去向。技能负责定义检查方法,定时任务负责何时启动;二者配合,才不会每天自动生成一份缺乏依据的“已完成”。

Codex 定时任务先把手动检查跑通

你希望每天检查一遍文章目录,但直接输入“每天检查质量”,第二天可能得到一段泛泛总结:不知道检查了哪些文件,也不知道失败是否被遗漏。本文用 Markdown 标题检查作为最小例子,把输入、判断规则和报告写清楚,再讨论如何安排重复执行。编程狮这次不把格式检查冒充完整内容审稿,也不要求你先搭建复杂服务;你只需要一个可读取的项目和能手动运行的检查脚本。

一、技能是工作说明,不是一个独立时钟

技能目录里的 SKILL.md 描述什么时候使用、读取什么以及如何交付结果。它本身不会因为到了上午九点就自动运行。定时任务保存执行安排和提示,由运行环境在相应时间发起一次任务。

因此,“我建好了技能”和“我建好了定时任务”是两个不同的完成条件。前者应能在普通对话中被正确调用,后者应有明确的启用状态、执行位置和时间安排。把它们分开,可以先排除技能逻辑错误,再排除调度与环境问题。

下面把技能放在项目的 .agents/skills/note-title-audit 目录中。它只检查本项目 notes 目录中的 Markdown,不递归访问整个磁盘,不提交代码,也不发布文章。如果还不熟悉项目如何交给工具使用,可先阅读 Codex 安装指南

二、把一次检查写成能重复得到同类结果的程序

保存以下 Python 3.10 及以上脚本为技能目录下的 scripts/audit.py。它检查空文件和一级标题数量,忽略反引号或波浪号围栏代码块中的标题示例,并输出 JSON。它不负责拼写、技术正确性或事实核查。

import json
import re
import sys
from pathlib import Path

def h1_count(text: str) -> int:
    fence = None
    total = 0
    for line in text.splitlines():
        mark = re.match(r"^ {0,3}(\x60{3,}|~{3,})", line)
        if fence:
            if re.fullmatch(r" {0,3}" + re.escape(fence[0])
                            + "{" + str(len(fence)) + r",}\s*", line):
                fence = None
            continue
        if mark:
            fence = mark.group(1)
            continue
        if re.match(r"^ {0,3}#\s+\S", line):
            total += 1
    return total

def audit(root: Path) -> dict:
    if not root.is_dir():
        return {"status": "ERROR", "reason": "输入目录不存在", "files": []}
    files = []
    for path in sorted(root.rglob("*.md")):
        try:
            text = path.read_text(encoding="utf-8-sig")
            count = h1_count(text)
            errors = ([] if text.strip() else ["空文件"])
            if count != 1:
                errors.append(f"一级标题数量为 {count}")
        except (OSError, UnicodeError) as exc:
            errors = [type(exc).__name__]
        files.append({"path": str(path.relative_to(root)), "errors": errors})
    status = "PASS" if files and all(not f["errors"] for f in files) else "FAIL"
    return {"status": status, "count": len(files), "files": files}

if __name__ == "__main__":
    if len(sys.argv) != 2:
        raise SystemExit("用法:python audit.py notes目录")
    result = audit(Path(sys.argv[1]))
    print(json.dumps(result, ensure_ascii=False, indent=2))
    raise SystemExit(0 if result["status"] == "PASS" else 1)

这个程序特意让空目录失败。否则定时任务切到了错误位置,扫描零篇文章也可能得到“全部通过”。输入目录不存在则是 ERROR,表示输入环境有问题,而不是文章被判不合格。编码异常也保留为文件级错误,不把读不出的内容当成空白。

先在 notes 里分别准备一个正常标题文件、两个标题文件和空文件,手动运行脚本。确认结果能指出异常,再把输入恢复成正常集合。退出码可以帮助调用方区分成功和失败,但报告仍要保留具体文件名,不能只给一个数字。

需要注意,这是面向约定写法的小型扫描器,不是完整 Markdown 解析器:它识别 ATX 一级标题及常见围栏,不支持所有嵌套容器语法,也不识别下划线式 Setext 标题。如果团队允许复杂 Markdown,应接入解析器并扩充用例,而不是把这个脚本的能力写大。

三、给技能写清输入边界与失败后的动作

在同一技能目录建立 SKILL.md。下面是一份可按项目路径调整的说明示例,脚本文件仍需由你按上节保存:

---
name: note-title-audit
description: 检查本项目 notes 目录中 Markdown 的空文件和一级标题数量。
---

先确认项目根目录和 notes 输入目录存在。
使用当前环境可用的 Python 运行本技能 scripts/audit.py,传入 notes 的完整路径。
只读检查,不修改文章、不提交代码、不发布内容。
保存本次结果到项目 reports 下带日期和时间的报告文件。
报告列出输入目录、文件总数、异常文件、退出码和能力限制。
目录不存在或脚本失败时报告错误,不得写全部通过。
这只是标题与空文件检查,不代表文章质量合格。

给报告名加时间,是为了避免同一天补跑覆盖早上的结果。报告里还应写明使用的是哪份项目内容:如果执行于隔离工作区,用户工作目录里的未提交稿件可能不在其中。文章草稿放在哪,检查就应明确指向哪,不能只根据项目名称猜测。

技能说明不宜把所有事情都交给模型自由解释。标题数量交给程序,结果解释交给助手,处理范围由你规定。有关组织技能的思路,可以配合 AI 编程技能教程 阅读。后续新增图片检查,也应先有确定的缺失图片样例,再扩展流程。

四、安排重复执行之前,核对时间与运行环境

手动验收完成后,在 Codex 中创建定时任务,清楚表达:每天北京时间上午九点,在指定项目运行 note-title-audit,结果写入项目 reports,不修改文章。再检查任务界面展示的时区、时间、状态和工作位置是否符合你的意思。

本地任务需要相关运行环境可用。按照当前官方说明,运行本地项目自动化时,电脑需保持开启、应用需运行;不能把它当成关机后仍会执行的云端服务。若选择其他运行环境,也要另行确认代码、依赖和文件是否可访问,而不是默认继承本机状态。

还要明确重复执行时使用怎样的上下文:只做独立格式检查,适合每次只依赖当前文件和技能;需要持续追踪某个问题,则可能需要保留对话上下文。无论哪一种,都不应靠昨天的一句“通过”代替今天重新读取输入。

通知规则也应具体。可以要求有新增异常、运行失败或需要你决定时通知;没有变化时保持安静。安静不等于跳过检查,应仍然留下本次运行记录。首次执行后检查真实报告,而不是看到任务创建成功就算验收结束。

官方入口与本地执行条件以 Codex 自动化文档 为准,技能目录与字段可对照 技能构建文档。这些说明可能更新,升级后优先复查工作位置和环境依赖。

定时检查不能只有“通过”一种结果

总结

Codex 定时任务落地的顺序是:规定输入与检查边界,手动测试通过,封装为技能,安排执行,验收第一次真实结果。定时运行只改变执行频率,不会自动提高检查方法的覆盖率。

本文脚本只解决“空文件和标题数量”。如果你要审文章质量,还需加入来源、代码、内链、图片和人工内容判断,并分别保留证据。不要把一个窄范围的 PASS 扩大成整篇文章可以发布。

延伸学习

  1. 阅读 Codex 插件指南,区分扩展能力与执行安排。
  2. Python 3 教程 练习文件遍历与异常处理。
  3. 参考 AI 编程助手对比笔记,了解不同工具的适用任务。

常见问题

Q:创建技能以后,它会自己每天执行吗?

A:不会。技能提供方法,还需要配置定时任务,并确认它处于启用状态及所需环境可用。

Q:检查结果通过,能直接自动发布文章吗?

A:不能据此判断。本文只检查标题与空文件,既不验证内容质量,也没有发布授权;发布应作为另一个明确授权的流程。

Q:为什么手动能读到文章,定时运行却找不到?

A:先检查运行位置和输入的完整路径,再看是否执行于另一份工作区。环境差异应作为错误报告出来,不应把零文件解释成零问题。

0 人点赞