Planificateur de tâches en TypeScript : guide complet des bibliothèques cron et des minuteurs

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 TypeScript : guide complet



Un planificateur de tâches (task scheduler) est un outil permettant d'exécuter des fonctions ou des scripts à un moment précis ou à une périodicité définie. Dans l'écosystème TypeScript, il existe plusieurs bibliothèques matures pour implémenter de tels scénarios : des simples minuteurs aux puissants systèmes cron. Dans cet article, nous allons examiner les principales approches et montrer comment les utiliser dans des projets réels.



Pourquoi un planificateur de tâches ?

L'automatisation des actions répétitives est une tâche clé de toute application serveur. Scénarios typiques :

  • Envoi de notifications par e-mail toutes les heures.
  • Nettoyage des fichiers temporaires chaque nuit.
  • Collecte d'analyses en fin de journée.
  • Mise à jour du cache selon un calendrier.

En TypeScript (et JavaScript), un mécanisme de base est intégré — setInterval et setTimeout, mais pour des plannings complexes, il est plus pratique d'utiliser des bibliothèques spécialisées.



Outils intégrés : setInterval et setTimeout

La méthode la plus simple consiste à utiliser les fonctions globales :

// Exemple : exécuter toutes les 5 secondesconst intervalId = setInterval(() => {  console.log('Tâche exécutée à', new Date().toISOString());}, 5000);

// Arrêt après 30 secondessetTimeout(() => { clearInterval(intervalId); console.log('Planificateur arrêté');}, 30000);

Avantages : ne nécessite pas d'installation, fonctionne dans n'importe quel environnement. Inconvénients : pas de support des expressions cron, difficile de gérer les tâches manquées.



Bibliothèque node-cron

L'une des bibliothèques les plus populaires pour Node.js. Fonctionne avec le format cron classique (5 champs) : minutes, heures, jour du mois, mois, jour de la semaine.



Installation

npm install node-cronnpm install @types/node-cron


Exemple d'utilisation

import * as cron from 'node-cron';

// Tâche : toutes les minutescron.schedule('* * * * *', () => { console.log('Exécution toutes les minutes');});

// Tâche : tous les jours à 9h30cron.schedule('30 9 * * *', () => { console.log('Tâche quotidienne à 9h30');});

// Tâche : en semaine à 18h00cron.schedule('0 18 * * 1-5', () => { console.log('En semaine à 18h00');});


Gestion des tâches

import * as cron from 'node-cron';

const task = cron.schedule('*/5 * * * *', () => { console.log('Toutes les 5 minutes');});

// Arrêter la tâchetask.stop();

// Reprendretask.start();

// Vérifier le statutconsole.log(task.isActive()); // true ou false


Bibliothèque croner

Une alternative plus moderne, écrite en TypeScript à partir de zéro. Prend en charge la syntaxe étendue (secondes, noms de mois) et fonctionne à la fois dans Node.js et dans le navigateur.



Installation

npm install croner


Exemple avec secondes

import Cron from 'croner';

// Toutes les 10 secondesconst job = new Cron('*/10 * * * * *', () => { console.log('Exécution toutes les 10 secondes');});

// Tâche : tous les lundis à 8h30const weeklyJob = new Cron('30 8 * * 1', () => { console.log('Lundi, 8h30');});

// Arrêt après 1 minutesetTimeout(() => { job.stop(); console.log('Tâche arrêtée');}, 60000);


Fonctionnalités avancées

import Cron from 'croner';

// Tâche avec nom et fuseau horaireconst job = new Cron('0 9 * * *', { name: 'morning-report', timezone: 'Europe/Moscow'}, () => { console.log('Rapport matinal pour Moscou');});

// Obtenir la prochaine heure d'exécutionconst nextRun = job.nextRun();console.log('Prochaine exécution :', nextRun.toISOString());

// Liste de toutes les tâches activesconst activeJobs = Cron.getJobs();console.log('Tâches actives :', activeJobs.length);


Comparaison de node-cron et croner

  • node-cron — une bibliothèque éprouvée par le temps

Recommendations