iconDirEasy

定时任务配置

配置定时任务来发送邮件和更新发布状态

概述

在DirEasy中,有三种定时任务:

  1. update-launches.ts
  • 频道初始状态为SCHEDULED,带有计划的发布日期
  • 在发布日UTC时间8:00,状态变为ONGOING
  • 在第二天UTC时间8:00,状态变为LAUNCHED
  • 计算昨天发布的3个最受欢迎项目
  1. send-ongoing-reminders.ts
  • 在发布日UTC时间8:30,向用户发送关于他们正在进行的发布的提醒邮件
  1. send-winner-notifications.ts
  • 在发布日UTC时间9:00,向当天的获胜者发送邮件通知
  • 无论您运营什么类型的目录网站,update-launches.ts都是必需的(除非您想直接在数据库中手动审核和更新状态),而send-ongoing-reminders.tssend-winner-notifications.ts对于类似Product Hunter的目录网站是必需的
  • 调度时间是可配置的,您可以根据需要修改,我们将在下面介绍

配置指南

设置环境变量

.env文件中添加以下环境变量:

.env
# 这是定时任务的API密钥。您可以使用`openssl rand -hex 32`生成一个,或使用复杂的随机字符串
CRON_API_KEY=
# [仅在使用Vercel定时任务时需要设置,否则不需要。此值与`CRON_API_KEY`相同]
#CRON_SECRET=

添加定时任务到任务提供商平台

推荐使用FastCron按计划触发定时任务。但您也可以选择其他后台任务服务,如Vercelcron-job

FastCron

FastCron免费版支持5个定时任务,并支持重试。推荐使用。

创建FastCron账户并添加三个定时任务,至少设置:

  • 调用的URL

https://your-website.com/api/cron/update-launcheshttps://your-website.com/api/cron/send-ongoing-remindershttps://your-website.com/api/cron/send-winner-notifications

  • 调用时间

设置调度时间

请记住将 'timezone' 设置为 'UTC'。当然,您可以根据需要对其进行修改。 FastCron

  • 发送Http请求字段:

设置为Authorization: Bearer {CRON_API_KEY},将{CRON_API_KEY}替换为您的值

FastCron FastCron

Cron-job

FastCron类似,但不支持重试

Vercel定时任务

Vercel定时任务免费版仅支持2个定时任务,且不支持重试

  • 调度功能

您可以通过修改代码库根目录下的vercel.json文件来调度任务:

{
  "crons": [
    {
      "path": "/api/cron/update-launches",
      "schedule": "0 8 * * *"
    },
    {
      "path": "/api/cron/send-ongoing-reminders",
      "schedule": "30 8 * * *"
    },
    {
      "path": "/api/cron/send-winner-notifications",
      "schedule": "0 9 * * *"
    }
  ]
}
  • Vercel如何触发定时任务

Vercel会向您项目的生产部署URL发送HTTP GET请求,使用vercel.json文件中提供的路径。例如,Vercel可能会请求:

https://*.vercel.app/api/cron/update-launches
  • 手动触发功能

如需手动触发定时任务,您可以在Vercel仪表板中操作,或直接向端点发送标准HTTP请求。例如:

终端
curl -X GET http://localhost:3000/api/cron/update-launches

目录