TypeScript-Aufgabenplaner: Vollständiger Leitfaden
Ein Aufgabenplaner (Task Scheduler) ist ein Werkzeug, das es ermöglicht, Funktionen oder Skripte zu einer bestimmten Zeit oder in einem festgelegten Intervall auszuführen. Im TypeScript-Ökosystem gibt es mehrere ausgereifte Bibliotheken zur Umsetzung solcher Szenarien: von einfachen Timern bis hin zu leistungsstarken Cron-Systemen. In diesem Artikel betrachten wir die grundlegenden Ansätze und zeigen, wie man sie in realen Projekten einsetzt.
Wozu braucht man einen Aufgabenplaner?
Die Automatisierung wiederkehrender Aktionen ist eine Kernaufgabe jeder Serveranwendung. Typische Szenarien:
- Stündliches Versenden von E-Mail-Benachrichtigungen.
- Nächtliche Bereinigung temporärer Dateien.
- Erfassung von Analysedaten am Tagesende.
- Planmäßige Cache-Aktualisierung.
In TypeScript (und JavaScript) gibt es einen integrierten Basis-Mechanismus – setInterval und setTimeout –, aber für komplexe Zeitpläne sind spezialisierte Bibliotheken praktischer.
Integrierte Werkzeuge: setInterval und setTimeout
Der einfachste Weg ist die Verwendung globaler Funktionen:
// Beispiel: Alle 5 Sekunden ausführenconst intervalId = setInterval(() => { console.log('Aufgabe ausgeführt um', new Date().toISOString());}, 5000);
// Stopp nach 30 SekundensetTimeout(() => { clearInterval(intervalId); console.log('Planer gestoppt');}, 30000);Vorteile: Keine Installation erforderlich, funktioniert in jeder Umgebung. Nachteile: Keine Unterstützung für Cron-Ausdrücke, schwierige Verwaltung verpasster Aufgaben.
Bibliothek node-cron
Eine der beliebtesten Bibliotheken für Node.js. Arbeitet mit dem klassischen Cron-Format (5 Felder): Minuten, Stunden, Tag des Monats, Monat, Wochentag.
Installation
npm install node-cronnpm install @types/node-cronAnwendungsbeispiel
import * as cron from 'node-cron';
// Aufgabe: Jede Minutecron.schedule('* * * * *', () => { console.log('Start jede Minute');});
// Aufgabe: Jeden Tag um 9:30 Uhrcron.schedule('30 9 * * *', () => { console.log('Tägliche Aufgabe um 9:30');});
// Aufgabe: An Werktagen um 18:00 Uhrcron.schedule('0 18 * * 1-5', () => { console.log('An Werktagen um 18:00');});Aufgabenverwaltung
import * as cron from 'node-cron';
const task = cron.schedule('*/5 * * * *', () => { console.log('Alle 5 Minuten');});
// Aufgabe stoppentask.stop();
// Fortsetzentask.start();
// Status prüfenconsole.log(task.isActive()); // true oder falseBibliothek croner
Eine modernere Alternative, die von Grund auf in TypeScript geschrieben wurde. Unterstützt erweiterte Syntax (Sekunden, Monatsnamen) und funktioniert sowohl in Node.js als auch im Browser.
Installation
npm install cronerBeispiel mit Sekunden
import Cron from 'croner';
// Alle 10 Sekundenconst job = new Cron('*/10 * * * * *', () => { console.log('Start alle 10 Sekunden');});
// Aufgabe: Jeden Montag um 8:30 Uhrconst weeklyJob = new Cron('30 8 * * 1', () => { console.log('Montag, 8:30');});
// Stopp nach 1 MinutesetTimeout(() => { job.stop(); console.log('Aufgabe gestoppt');}, 60000);Erweiterte Funktionen
import Cron from 'croner';
// Aufgabe mit Name und Zeitzoneconst job = new Cron('0 9 * * *', { name: 'morning-report', timezone: 'Europe/Moscow'}, () => { console.log('Morgendlicher Bericht für Moskau');});
// Nächste Ausführungszeit abrufenconst nextRun = job.nextRun();console.log('Nächster Start:', nextRun.toISOString());
// Liste aller aktiven Aufgabenconst activeJobs = Cron.getJobs();console.log('Aktive Aufgaben:', activeJobs.length);Vergleich von node-cron und croner
- node-cron – eine bewährte Bibliothek