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-cronExemple 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 falseBibliothè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 cronerExemple 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
Aussi dans la bibliothèque
Travailler avec les dates en Kotlin : aperçu des bibliothèques et outils
Apprentissage automatique en Java : aperçu des bibliothèques pour le développement de modèles
Envoi de SMS en Swift (iOS/macOS) : API MessageUI et services tiers
Travailler avec Excel en Kotlin : bibliothèques Apache POI et Apache POI pour Kotlin