Aufgabenplaner für Node.js: node-schedule und node-cron
In der modernen Webentwicklung besteht häufig die Notwendigkeit, bestimmte Aktionen zu einer festgelegten Zeit oder in regelmäßigen Abständen auszuführen. Zum Beispiel das Versenden von Berichten per E-Mail, die Bereinigung der Datenbank, das Parsen externer Ressourcen oder die Aktualisierung des Caches. In der Node.js-Umgebung werden hierfür Aufgabenplaner verwendet. Die beiden beliebtesten Werkzeuge sind node-schedule und node-cron. In diesem Artikel werden wir beide im Detail analysieren, Codebeispiele geben und Ihnen helfen, den passenden für Ihr Projekt auszuwählen.
Wozu braucht man einen Aufgabenplaner in Node.js?
Node.js ist eine Single-Thread-Umgebung mit einer ereignisgesteuerten Architektur. Die integrierten Funktionen setTimeout und setInterval ermöglichen die Ausführung von Code mit einer Verzögerung oder in regelmäßigen Abständen, sind jedoch für komplexe Szenarien nicht geeignet:
- Keine Flexibilität bei der Konfiguration (z. B. „jeden zweiten Montag im Monat um 10:30 Uhr“).
- Sie speichern den Zustand nach einem Neustart der Anwendung nicht.
- Schwierigkeiten bei der Verwaltung (Abbrechen, Ändern des Zeitplans).
Planer lösen diese Probleme, indem sie eine einfache API zum Erstellen, Starten und Abbrechen von zeitgesteuerten Aufgaben bereitstellen.
Die Bibliothek node-schedule
node-schedule ist ein flexibler Planer, der auf einer cron-ähnlichen Syntax basiert, aber erweiterte Funktionen bietet. Er ermöglicht die Definition von sich wiederholenden Aufgaben mit einer Genauigkeit von einer Minute sowie einmaligen Aufgaben zu einem bestimmten Datum.
Installation
npm install node-scheduleHauptfunktionen
- Unterstützung von Cron-Ausdrücken (6 Felder: Sekunden, Minuten, Stunden, Tag des Monats, Monat, Wochentag).
- Möglichkeit, eine einmalige Ausführung mit einem Date-Objekt festzulegen.
- Wiederkehrende Regeln mit dem Objekt
RecurrenceRule. - Methoden
cancel()undcancelNext()zur Aufgabenverwaltung.
Beispiel 1: Aufgabe alle 5 Minuten ausführen
const schedule = require('node-schedule');
const job = schedule.scheduleJob('*/5 * * * *', function() { console.log('Aufgabe wird alle 5 Minuten ausgeführt:', new Date().toLocaleString());});
// Aufgabe nach 20 Minuten abbrechensetTimeout(() => { job.cancel(); console.log('Aufgabe abgebrochen');}, 20 * 60 * 1000);Beispiel 2: Aufgabe zu einem bestimmten Datum
const schedule = require('node-schedule');
const date = new Date(2025, 5, 15, 10, 30, 0); // 15. Juni 2025, 10:30:00
const job = schedule.scheduleJob(date, function() { console.log('Einmalige Aufgabe ausgeführt um', new Date().toLocaleString());});
console.log('Aufgabe geplant für', date.toLocaleString());Beispiel 3: Komplexe wiederkehrende Regel
const schedule = require('node-schedule');
const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Montag, Mittwoch, Freitagrule.hour = 9;rule.minute = 0;
const job = schedule.scheduleJob(rule, function() { console.log('Aufgabe wird um 9:00 an Werktagen (Mo, Mi, Fr) ausgeführt');});Die Bibliothek node-cron
node-cron ist eine leichtgewichtige Alternative, die auf dem klassischen Cron aus Unix-Systemen basiert. Sie ist einfacher zu bedienen, aber weniger flexibel als node-schedule. Unterstützt 5 Felder (Minuten, Stunden, Tag des Monats, Monat, Wochentag).
Installation
npm install node-cronHauptfunktionen
- Standard-Cron-Syntax (5 Felder).
- Methoden
start(),stop(),destroy(). - Unterstützung von Zeitzonen über die Option
timezone. - Möglichkeit, eine Aufgabe sofort mit
now()auszuführen.
Beispiel 1: Aufgabe jeden Tag um Mitternacht ausführen
const c Auch in der Bibliothek
nodemailer
Testen in Kotlin: Frameworks und Werkzeuge für qualitativ hochwertigen Code
openai-api-rs Rust: Vollständige Anleitung mit Codebeispielen
Redis-Client für Node.js: ioredis – ein leistungsstarkes Tool für die Arbeit mit Redis