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.