encore-cron

Par encoredev · skills

Planifiez des tâches périodiques/récurrentes dans Encore.ts à l'aide de `CronJob` depuis `encore.dev/cron`. Couvre la syntaxe d'intervalle `every: "1h"` et les expressions cron `schedule: "0 9 * * 1"`.

npx skills add https://github.com/encoredev/skills --skill encore-cron

Encore Cron Jobs

Instructions

Une déclaration CronJob dans Encore.ts lie une planification à un endpoint api(...) existant. L'endpoint s'exécute à la cadence choisie. Déclarez le CronJob au niveau du package — pas à l'intérieur d'une fonction.

import { CronJob } from "encore.dev/cron";
import { api } from "encore.dev/api";

// 1. L'endpoint à appeler (généralement interne : expose: false)
export const aggregateDailyOrders = api(
  { expose: false },
  async (): Promise<void> => {
    // Logique d'agrégation
  }
);

// 2. Déclaration cron au niveau du package
const _ = new CronJob("aggregate-daily-orders", {
  title: "Aggregate orders for the previous day",
  schedule: "0 2 * * *",  // 02:00 UTC tous les jours
  endpoint: aggregateDailyOrders,
});

Formats de planification

Field Exemple Description
every "1h", "30m", "6h" Intervalle simple. Doit diviser 24h de façon égale"7h" est invalide.
schedule "0 9 * * 1" Expression cron standard (5 champs, UTC).

Expressions cron courantes

Cron Signification
"0 * * * *" Chaque heure, à l'heure pile
"0 2 * * *" Quotidiennement à 02:00 UTC
"0 0 * * 0" Chaque dimanche à minuit UTC
"0 4 15 * *" 04:00 UTC le 15 de chaque mois

Comportement important

  • Les cron jobs ne s'exécutent pas en local avec encore run. Seuls les environnements déployés déclenchent les crons.
  • L'endpoint cron doit être expose: false pour qu'il ne puisse pas être déclenché de l'extérieur — seul le planificateur cron doit l'appeler.
  • Tous les horaires dans schedule sont en UTC. Convertissez depuis l'heure locale en concevant la planification.
  • L'endpoint doit déjà exister au chargement du module — déclarez-le avant le CronJob.

Recommandations

  • Utilisez every pour « exécuter à intervalle régulier » (doit diviser 24h).
  • Utilisez schedule pour des heures spécifiques de la journée ou des jours de la semaine.
  • Gardez la logique de l'endpoint idempotente : un cron peut s'exécuter en retard ou être relancé lors d'un redéploiement.
  • Pour du travail en arrière-plan piloté par événements (non piloté par le temps), utilisez plutôt la skill encore-pubsub.

Skills similaires