Vercel|创建 cron jobs 定时任务
设置定时任务之后,Vercel 会定时向指定端点发送 HTTP 请求,从而完成一些自动化工作。
关于 Vercel Cron Jobs 的几个关键点:
- 只能通过
vercel.json配置,不支持 Web 端配置。 - 只对生产环境生效。
- 只支持 GET 方法。
vercel.json 时间配置
添加 Authorization 保护
通过在 Vercel 项目中添加名为 CRON_SECRET 的环境变量,可实现对 cron 任务调用的安全保护。
只要在 Vercel 项目中设置了 CRON_SECRET 环境变量,Vercel Cron 会自动在每次请求中包含:Authorization: Bearer {CRON_SECRET}
我们需要在端点中手动添加对 Authorization 的验证代码:

详情参见官方说明:https://vercel.com/docs/cron-jobs/manage-cron-jobs?framework=nextjs
常见问题
定时任务不触发
定时任务未按预期触发,在 Log 中看不到任何访问记录。即使手动点击 Run 也没有执行记录。
- 是否和部署方式 有关系?
尝试在 IDE 本地使用 Vercel Cli 工具进行编译,如果有错误先解决错误。
vercel build --prod然后,尝试使用 vercel cli 部署。
vercel deploy // 部署到 Preview,然后在 Dashboard 手动推送到生产环境。问题仍然存在,仍然没有访问记录。
- 是否和域名有关系?
Vercel 项目会默认创建一个域名,例如:autoused-backend.vercel.app。
我之前删除了这个配置,更新为了我自己的域名。现在我怀疑是否是这个域名不生效,导致 cron 无法执行?但是当我想主动在 Domain 中添加这个域名,又会提示我已经绑定,但是访问这个域名确实未绑定(这里可能是一个 BUG)。因此,陷入了死循环无法测试。
我只能尝试删除 vercel 项目,然后重新部署试试。
- 尝试删除 Vercel 项目,重新创建?
重新创建 vercel 项目之后,问题仍然存在。
最后发现是环境变量的问题。
原因是使用 AI 通过 vercel cli 配置的环境变量,自动为每个环境变量添加了一个【空格】。在 Dashboard 上没有报错,只有编辑环境变量的时候才有提示。

建议手动设置环境变量,cli 命令可能会添加格外的换行符,导致环境变量不匹配导致问题!至少需要手动检查一下。

Comments ()