SuperAPI AI 工具集

convex-cron-jobs

部署与运维

查看项目

更新于 10-16 07:22

技能介绍

用途:在 Convex 中安排定时、延后或后台执行的工作,并排查 cron 不触发的问题。

主要能力:周期性任务写在 convex/crons.ts,使用 crons.interval(每 N 秒/分/时)与 crons.cron(日历表达式,始终为 UTC);crons.daily、crons.hourly、crons.weekly 已废弃,不应使用。一次性任务在函数内用 ctx.scheduler 调度:runAfter(delayMs, fn, args) 用于重试、跟进、相对延时;runAt(timestamp, fn, args) 用于试用到期、发送日期等已存储时间。两者返回 Id<"_scheduled_functions">,需要取消时可存到文档上。

关键规则:cron 与调度目标必须是 internal.* 函数(internalMutation、internalAction、internalQuery),不能用 api.*,否则会跳过鉴权并对外暴露。参数为静态值且需满足目标函数的 args 校验器。名称在文件内唯一。

大批量任务:单次 mutation 有读写限制,应取固定批次(如 take(BATCH)),再用 runAfter(0, ...) 链式重调度;若更新行但不移出索引范围,改用分页游标。

行为与限制:mutation 内调度是事务性的,抛错则不调度;action 内调度立即生效,即使 action 之后失败。已调度的 mutation 恰好执行一次;已调度的 action 可能失败且不重试,需自行加重试逻辑。查询中不可调用 Date.now()。

查看与排查:仪表盘 Schedules 的 Cron Jobs 标签列出 crons.ts 条目及上次/下次运行,Scheduled Functions 标签列出待执行任务;Logs 按函数名过滤;CLI 可用 npx convex logs;代码中 ctx.db.system.get(jobId) 返回状态(pending、inProgress、success、failed、canceled)。cron 不触发时检查文件路径与默认导出、npx convex dev 是否推送成功、目标是否为 internal.*、参数是否匹配、表达式是否为 UTC,以及日志中的报错。

参考文件:references/scheduling-patterns.md 覆盖退避重试、取消、读取 _scheduled_functions、去抖、本地时区;references/cron-recipes.md 提供每日摘要邮件、会话过期、统计汇总、外部 API 同步等示例。文档见 https://docs.convex.dev/scheduling/cron-jobs 与 https://docs.convex.dev/scheduling/scheduled-functions。