Planificateur de tâches en Node.js : node-cron, node-schedule et Bull

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Planificateur de tâches en Node.js : aperçu des bibliothèques node-cron, node-schedule et Bull



Dans le développement web moderne avec Node.js, il est souvent nécessaire d'exécuter du code selon un horaire ou avec un délai. Qu'il s'agisse d'envoyer des newsletters par email, de vider le cache, de générer des rapports ou de synchroniser des données, un planificateur de tâches fiable est indispensable. Dans cet article, nous allons analyser trois outils populaires : node-cron, node-schedule et Bull. Vous découvrirez leurs caractéristiques, des exemples d'utilisation et comprendrez lequel choisir pour votre tâche.



1. node-cron — le classique Cron pour Node.js

node-cron est une bibliothèque minimaliste qui implémente la syntaxe du planificateur Unix cron. Elle est idéale pour les tâches répétitives simples.



Installation

npm install node-cron


Exemple : tâche s'exécutant toutes les minutes

const cron = require('node-cron');

cron.schedule('* * * * *', () => { console.log('La tâche s\\'exécute toutes les minutes');});


Format de l'expression cron

L'expression se compose de 5 champs :

  • seconde (0-59, optionnel)
  • minute (0-59)
  • heure (0-23)
  • jour du mois (1-31)
  • mois (1-12)
  • jour de la semaine (0-7, 0 et 7 = dimanche)


Exemple avancé : tous les jours à 8h30

cron.schedule('30 8 * * *', () => {  // Envoi des statistiques matinales  sendMorningReport();});


Caractéristiques

  • Prise en charge des fuseaux horaires via l'option timezone
  • Possibilité de démarrer et d'arrêter des tâches
  • Léger (~20 Ko)
  • Ne convient pas pour une logique complexe avec des files d'attente


2. node-schedule — un planificateur flexible avec des règles récurrentes

node-schedule offre une API plus riche : vous pouvez définir des horaires via des objets, et pas seulement des chaînes cron. C'est pratique pour des scénarios complexes (par exemple, « chaque deuxième mardi du mois à 15h00 »).



Installation

npm install node-schedule


Exemple : tâche avec expression cron

const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/5 * * * *', () => { console.log('Exécution toutes les 5 minutes');});


Exemple : règle récurrente via un objet

const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Lun, Mer, Venrule.hour = 10;rule.minute = 30;

schedule.scheduleJob(rule, () => { console.log('Tâche en semaine à 10h30');});


Exemple : exécution différée

const date = new Date(Date.now() + 5000); // dans 5 secondesschedule.scheduleJob(date, () => {  console.log('Tâche unique dans 5 secondes');});


Caractéristiques

  • Définition flexible des règles (jours de la semaine, mois, plages)
  • Prise en charge des tâches uniques basées sur une date
  • Possibilité d'annuler une tâche : job.cancel()
  • Ne prend pas en charge la clustering ni les files d'attente


3. Bull — une file d'attente puissante avec planificateur et répétitions

Bull n'est pas seulement un planificateur, mais un système de files d'attente complet basé sur Redis. Il est idéal pour les environnements de production : il prend en charge les tâches différées, les répétitions en cas d'erreur, les priorités et le traitement parallèle.



Installation

npm install bull# Nécessite Redis installé


Exemple : tâche simple avec délai

const Queue = require('bull');const myQueue = new Queue('myQueue', 'redis://127.0.0.1:6379');

// Ajout d'une tâche avec un délai d'1 heuremyQueue.add({ email: 'user@example.com' }, { delay: 3600000 });

// GestionnairemyQueue.process(async (job) => { console.log(`Envoi d'email pour ${job.data.email}`); await sendEmail(job

Recommendations