Aurabase Logo
aurabasedocs
docsServicesCron

Cron

Planifier l’invocation d’une Edge Function sur une expression cron. Chaque échéance enfile un job dans la même file que les invocations asynchrones, consommé par le pool de workers — sans réessai en cas d’échec.

5 min de lecture·Niveau intermédiaire·Révisé le 15 août 2026
#
Vue d’ensemble

Un déclencheur de plus pour vos fonctions

Le service aura-functions peut invoquer une Edge Function selon une planification, en plus des invocations HTTP synchrones et des jobs asynchrones mis en file manuellement — voir /docs/functions. Il n'y a pas de fonction « cron » à part : n'importe quelle fonction déployée peut être ciblée par une planification.

Info
Le cron ne remplace pas un ordonnanceur SQL. Pour des tâches purement base de données (rafraîchir une vue matérialisée, purger une table), l'extension Postgres pg_cron — activable depuis le Studio, voir /docs/database — évite l'aller-retour HTTP vers une fonction.
#
Modèle mental

Le cron enfile, il n’exécute pas

Une échéance de cron ne lance pas la fonction directement : elle crée un job dans la file (les mêmes tables et le même pool de workers que POST /v1/functions/:projectId/jobs), avec un payload figé au moment de la création du cron. Le job est ensuite consommé par un worker comme n'importe quel autre job.

cycle d’une échéance
TEXT
ÉCHÉANCE ────▶ le scheduler in-process déclenche à l’heure prévue
ENQUEUE ────▶ un job est créé (function_name + payload du cron)
WORKER ────▶ le pool de workers consomme le job, invoque la fonction
ÉCHEC ────▶ max_attempts=1 → dead (DLQ) immédiatement, pas de retry
SUCCÈS ────▶ last_run + next_run mis à jour sur la ligne cron
Astuce
Au redémarrage du service, tous les crons actifs de tous les projets provisionnés sont rechargés depuis la base et replanifiés — la liste des tâches n'est pas persistée en mémoire seule.
#
Primitives

Ce que le scheduler fournit

Scheduler in-process
tokio-cron-scheduler + la crate cron dans aura-functions : pas de service externe, planification en mémoire replanifiée au démarrage.
§ scheduler
Chaque échéance = un job
Le cron n'exécute rien lui-même : il enfile un job (comme functions.invoke en mode asynchrone), consommé par le même pool de workers.
§ pipeline
Sans réessai
Un job créé par le cron a max_attempts=1 : un échec le fait basculer directement en DLQ (dead), contrairement aux jobs asynchrones classiques (3 tentatives par défaut).
§ échec
Suivi last_run / next_run
Chaque déclenchement horodate last_run et pré-calcule next_run à partir de l’expression stockée — visible via listCronJobs().
§ observabilité
#
Exemples

Créer, lister, supprimer

app/cron.tsTYPESCRIPT
import { createClient } from '@aurabase/aurabase-js'
const aura = createClient(url, projectId, serviceRoleKey)
# Expression 5 champs (min heure jour mois jsem) — les secondes sont
# implicitement 0. Une expression 6 champs (avec secondes) est aussi acceptée.
await aura.functions.createCronJob(
'rollup-15min', // nom, unique par projet
'*/15 * * * *', // planification
'rollup', // fonction invoquée à chaque échéance
{ payload: { minutes: 15 } },
)
const { data: crons } = await aura.functions.listCronJobs()
await aura.functions.deleteCronJob('rollup-15min')
Astuce
Le nom d'un cron est unique par projet et sert d'identifiant pour la suppression (DELETE /v1/functions/:projectId/cron/:nom) — il n'y a pas d'UUID à retenir côté client.
#
Points d’attention

Ce que le cron ne fait pas (encore)

Pas de commande CLI dédiée
Contrairement aux secrets de fonctions (aura secrets), il n'existe aujourd'hui aucune commande aura functions cron : la gestion des tâches planifiées passe par le SDK ou l'API REST, pas par la CLI.
Pas de réessai automatique
Un job issu du cron échoue directement en dead (DLQ) dès la première tentative — max_attempts vaut 1, contre 3 par défaut pour un job asynchrone classique. Une fonction invoquée par cron doit donc gérer elle-même ses propres reprises si l'opération sous-jacente doit être garantie, ou vous devez surveiller la DLQ (GET /v1/functions/:projectId/jobs/dlq) et rejouer manuellement.
Dernière mise à jour · 15 août 2026