Planificateur de tâches sur Node.js : node-schedule et node-cron
Dans le développement web moderne, il est souvent nécessaire d'effectuer certaines actions à un moment donné ou à intervalles réguliers. Par exemple, l'envoi de rapports par email, le nettoyage de la base de données, l'analyse de ressources externes ou la mise à jour du cache. Dans l'environnement Node.js, des planificateurs de tâches sont utilisés à ces fins. Les deux outils les plus populaires sont node-schedule et node-cron. Dans cet article, nous analyserons les deux en détail, fournirons des exemples de code et vous aiderons à choisir celui qui convient à votre projet.
Pourquoi un planificateur de tâches dans Node.js ?
Node.js est un environnement monothread avec une architecture orientée événements. Les fonctions intégrées setTimeout et setInterval permettent d'exécuter du code avec un délai ou périodiquement, mais elles ne conviennent pas aux scénarios complexes :
- Pas de flexibilité dans la configuration (par exemple, « tous les deuxièmes lundis du mois à 10h30 »).
- Ne conservent pas l'état après un redémarrage de l'application.
- Difficultés de gestion (annulation, modification du planning).
Les planificateurs résolvent ces problèmes en fournissant une API simple pour créer, lancer et annuler des tâches planifiées.
Bibliothèque node-schedule
node-schedule est un planificateur flexible basé sur une syntaxe de type cron, mais avec des fonctionnalités avancées. Il permet de définir des tâches récurrentes avec une précision à la minute, ainsi que des tâches ponctuelles à une date spécifique.
Installation
npm install node-scheduleFonctionnalités principales
- Prise en charge des expressions cron (6 champs : secondes, minutes, heures, jour du mois, mois, jour de la semaine).
- Possibilité de définir une exécution unique avec un objet Date.
- Règles récurrentes avec l'objet
RecurrenceRule. - Méthodes
cancel()etcancelNext()pour la gestion des tâches.
Exemple 1 : Lancement d'une tâche toutes les 5 minutes
const schedule = require('node-schedule');
const job = schedule.scheduleJob('*/5 * * * *', function() { console.log('La tâche s\'exécute toutes les 5 minutes :', new Date().toLocaleString());});
// Annuler la tâche après 20 minutessetTimeout(() => { job.cancel(); console.log('Tâche annulée');}, 20 * 60 * 1000);Exemple 2 : Tâche à une date spécifique
const schedule = require('node-schedule');
const date = new Date(2025, 5, 15, 10, 30, 0); // 15 juin 2025, 10:30:00
const job = schedule.scheduleJob(date, function() { console.log('Tâche unique exécutée le', new Date().toLocaleString());});
console.log('Tâche planifiée au', date.toLocaleString());Exemple 3 : Règle récurrente complexe
const schedule = require('node-schedule');
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Lundi, mercredi, vendredirule.hour = 9;rule.minute = 0;
const job = schedule.scheduleJob(rule, function() { console.log('La tâche s\'exécute à 9h00 en semaine (Lun, Mer, Ven)');});Bibliothèque node-cron
node-cron est une alternative légère basée sur le cron classique des systèmes Unix. Elle est plus simple à utiliser, mais moins flexible que node-schedule. Elle prend en charge 5 champs (minutes, heures, jour du mois, mois, jour de la semaine).
Installation
npm install node-cronFonctionnalités principales
- Syntaxe cron standard (5 champs).
- Méthodes
start(),stop(),destroy(). - Prise en charge des fuseaux horaires via l'option
timezone. - Possibilité de lancer une tâche immédiatement avec
now().
Exemple 1 : Lancement d'une tâche chaque jour à minuit
const c Aussi dans la bibliothèque
StackExchange.Redis pour C# (.NET) : guide complet avec exemples
Range-v3 C++ : guide complet avec exemples pratiques
Configuration d'applications en C++ : bibliothèques et outils pour un paramétrage flexible
Frameworks CLI pour Java : aperçu et comparaison des meilleurs outils