DevToolBoxFREE
BlogAdvertise

Cron Serverless : GitHub Actions, Vercel Cron et Cloudflare Workers

9 min de lecturepar DevToolBox

Les expressions cron sont le langage universel pour planifier des tâches récurrentes. Mais quand on passe du crontab traditionnel aux plateformes serverless, chaque plateforme a ses particularités. Ce guide couvre tout pour planifier des jobs sur les trois plateformes serverless les plus populaires.

Bases des expressions cron

Une expression cron standard a 5 champs :

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *

Caractères spéciaux courants :

  • *toute valeur
  • */5toutes les 5 unités
  • 1,3,5valeurs spécifiques
  • 1-5plage de valeurs

Testez vos expressions cron avec notre Cron Parser →

Plateforme 1 : GitHub Actions

GitHub Actions utilise l'événement schedule avec la syntaxe cron standard à 5 champs.

Configuration

# .github/workflows/scheduled.yml
name: Scheduled Job
on:
  schedule:
    - cron: '30 5 * * 1-5'  # Weekdays at 5:30 AM UTC
    - cron: '0 12 1 * *'    # 1st of every month at noon UTC
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo "Running scheduled task"

Limitations clés

AspectDétails
Fuseau horaireUTC uniquement
Intervalle minimumToutes les 5 minutes (*/5 * * * *)
PrécisionDélai possible de 5-15 min en charge
BrancheBranche par défaut uniquement
DésactivationDésactivé après 60 jours d'inactivité

Planifications courantes

# Every 5 minutes
- cron: '*/5 * * * *'

# Every hour at minute 0
- cron: '0 * * * *'

# Daily at midnight UTC
- cron: '0 0 * * *'

# Daily at 9 AM Eastern (UTC-5, no DST)
- cron: '0 14 * * *'

# Weekdays at 8 AM UTC
- cron: '0 8 * * 1-5'

# Every Monday and Thursday at 6 PM UTC
- cron: '0 18 * * 1,4'

# First day of every month at midnight
- cron: '0 0 1 * *'

Tip: Les workflows GitHub Actions peuvent ne pas s'exécuter à l'heure exacte. Pour plus de précision, utilisez un déclencheur webhook.

Plateforme 2 : Vercel Cron Jobs

Les Cron Jobs Vercel déclenchent des fonctions serverless. Configurez-les dans vercel.json.

Configuration

// vercel.json
{
  "crons": [
    {
      "path": "/api/daily-report",
      "schedule": "0 8 * * *"
    },
    {
      "path": "/api/cleanup",
      "schedule": "0 0 * * 0"
    }
  ]
}

La route API

// app/api/daily-report/route.ts
import { NextResponse } from 'next/server';

export async function GET() {
  // Your scheduled logic here
  await sendDailyReport();
  return NextResponse.json({ ok: true });
}

// Vercel recommends setting maxDuration for long tasks
export const maxDuration = 60; // seconds

Limitations clés

PlanIntervalle minMax Cron JobsLimite d'exécution
Hobby (free)Once per day210s
ProOnce per hour4060s (default)
EnterpriseOnce per minute100900s

Important: Les Cron Jobs Vercel utilisent UTC. Sur Hobby, une fois par jour uniquement.

Plateforme 3 : Cloudflare Workers

Les Cron Triggers sont configurés dans wrangler.toml.

Configuration

# wrangler.toml
name = "my-worker"
main = "src/index.ts"

[triggers]
crons = [
  "*/5 * * * *",    # Every 5 minutes
  "0 12 * * 1-5",   # Weekdays at noon UTC
  "0 0 1 * *"       # First of every month
]

Code Worker

// src/index.ts
export default {
  async scheduled(
    controller: ScheduledController,
    env: Env,
    ctx: ExecutionContext
  ) {
    // controller.cron contains the cron pattern that triggered
    switch (controller.cron) {
      case '*/5 * * * *':
        await doHealthCheck(env);
        break;
      case '0 12 * * 1-5':
        await sendReport(env);
        break;
    }
  },
};

Limitations clés

AspectDétails
Fuseau horaireUTC uniquement
Intervalle minimumUne fois par minute
Max cron triggers3 par Worker (gratuit)
CPU10ms (gratuit) / 30s (payant)
PrécisionTrès fiable — exécution en edge

Comparaison multiplateforme

FonctionnalitéGitHub ActionsVercel CronCF Workers
TimezoneUTCUTCUTC
Min interval (free)5 min1/day1 min
Min interval (paid)5 min1/min1 min
ReliabilityMedium (can delay)HighVery high
Max execution time6 hours10s-900s10ms-30s
Config location.github/workflows/vercel.jsonwrangler.toml
Trigger handlerWorkflow YAMLAPI routescheduled() event

Piège des fuseaux horaires

Les trois plateformes utilisent UTC exclusivement.

Heure localeDécalage UTCCron (9h locale)
US Eastern (EST)UTC-50 14 * * *
US Pacific (PST)UTC-80 17 * * *
Central Europe (CET)UTC+10 8 * * *
China (CST)UTC+80 1 * * *
Japan (JST)UTC+90 0 * * *

Attention : l'heure d'été modifie les décalages UTC.

10 expressions cron prêtes à l'emploi

Planifications les plus courantes :

# Every 5 minutes
*/5 * * * *

# Every hour at :00
0 * * * *

# Every day at midnight UTC
0 0 * * *

# Every day at noon UTC
0 12 * * *

# Weekdays (Mon-Fri) at 9 AM UTC
0 9 * * 1-5

# Every Monday at 8 AM UTC
0 8 * * 1

# Every 6 hours
0 */6 * * *

# First day of every month at midnight
0 0 1 * *

# Every 15 minutes during business hours (8-17 UTC)
*/15 8-17 * * 1-5

# Last day of month at 11 PM UTC (approximate)
0 23 28-31 * *

Validez vos expressions cron avec notre Cron Parser →

Questions fréquentes

Quel fuseau horaire pour GitHub Actions ?

GitHub Actions utilise toujours UTC.

Quel intervalle minimum pour Vercel Cron ?

Hobby : 1/jour, Pro : 1/heure, Enterprise : 1/minute.

Cloudflare Workers peut-il tourner chaque seconde ?

Non. Granularité minimum : une minute.

Cet article vous a-t-il aidé ?

Stay Updated

Get weekly dev tips and new tool announcements.

No spam. Unsubscribe anytime.

Partner Picks

Sponsor this article

Place your product next to this developer topic with tracked clicks.

Ask about article sponsorship

This site uses cookies for analytics and to display ads. By continuing to browse, you agree. Privacy Policy