encore-go-cron

Par encoredev · skills

Planifiez des tâches périodiques/récurrentes dans Encore Go avec `cron.NewJob` 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-go-cron

Cron Jobs Encore Go

Instructions

Une déclaration cron.NewJob dans Encore Go lie un planning à un endpoint //encore:api existant. L'endpoint s'exécute à la cadence choisie. Déclarez le job comme une variable au niveau du package — pas à l'intérieur d'une fonction.

package cleanup

import (
    "context"
    "encore.dev/cron"
)

// 1. L'endpoint à appeler (généralement privé : //encore:api private)
//encore:api private
func CleanupExpiredSessions(ctx context.Context) error {
    // Logique de nettoyage
    return nil
}

// 2. Déclaration cron au niveau du package
var _ = cron.NewJob("cleanup-sessions", cron.JobConfig{
    Title:    "Clean up expired sessions",
    Schedule: "0 * * * *", // Toutes les heures
    Endpoint: CleanupExpiredSessions,
})

Formats de planning

Champ Exemple Description
Every "1h", "30m", "6h" Intervalle simple. Doit diviser 24h équitablement"7h" est invalide.
Schedule "0 9 * * 1" Expression cron standard (5 champs, UTC).

Expressions cron communes

Cron Signification
"0 * * * *" Toutes les heures, à l'heure juste
"0 2 * * *" Quotidiennement à 02:00 UTC
"0 0 * * 0" Hebdomadairement le 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 private 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 lors de la conception du planning.
  • L'endpoint doit être défini au chargement du module — déclarez-le avant la référence cron.NewJob.

Bonnes pratiques

  • Utilisez Every pour « exécuter à un 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 événementiel (non temporel), utilisez plutôt la skill encore-go-pubsub.

Skills similaires