node-schedule vs bull vs agenda
Job Scheduling Bibliotheken
node-schedulebullagendaPaquetes similares:

Job Scheduling Bibliotheken

Job Scheduling Bibliotheken sind nützliche Werkzeuge in der Webentwicklung, die es Entwicklern ermöglichen, zeitgesteuerte Aufgaben und Hintergrundprozesse effizient zu verwalten. Diese Bibliotheken bieten Funktionen zur Planung, Ausführung und Überwachung von Aufgaben, die zu bestimmten Zeiten oder in bestimmten Intervallen ausgeführt werden müssen. Sie sind besonders wichtig für Anwendungen, die regelmäßige Wartungsarbeiten, Benachrichtigungen oder andere automatisierte Prozesse erfordern.

Tendencia de descargas de npm

3 Años

Ranking de GitHub Stars

Detalle de estadísticas

Paquete
Descargas
Stars
Tamaño
Issues
Publicación
Licencia
node-schedule4,788,0159,19735.3 kB173hace 11 díasMIT
bull2,133,19616,262309 kB147hace 2 añosMIT
agenda212,2759,714310 kB19hace 5 díasMIT

Comparación de características: node-schedule vs bull vs agenda

Architektur

  • node-schedule:

    Node-schedule ist eine leichtgewichtige Bibliothek, die eine einfache API zur Planung von Jobs basierend auf Cron-Syntax bietet. Die Architektur ist einfach und ermöglicht es Entwicklern, zeitgesteuerte Aufgaben ohne zusätzliche Abhängigkeiten oder komplexe Konfigurationen zu planen.

  • bull:

    Bull ist eine Job-Warteschlangen-Bibliothek, die Redis zur Speicherung von Job-Informationen verwendet. Die Architektur von Bull ermöglicht eine hohe Leistung und Skalierbarkeit, indem sie eine asynchrone Verarbeitung von Jobs unterstützt und eine einfache API für die Verwaltung von Warteschlangen bietet.

  • agenda:

    Agenda verwendet eine MongoDB-Datenbank zur Speicherung von Job-Informationen und bietet eine einfache API zur Planung und Verwaltung von Jobs. Die Architektur ist darauf ausgelegt, eine hohe Flexibilität und Anpassbarkeit zu ermöglichen, was es Entwicklern erleichtert, komplexe Job-Workflows zu erstellen.

Leistungsfähigkeit

  • node-schedule:

    Node-schedule ist für einfache zeitgesteuerte Aufgaben konzipiert und bietet eine angemessene Leistung für Anwendungen mit geringeren Anforderungen. Es ist jedoch nicht für die Verarbeitung von großen Mengen an Jobs oder komplexen Job-Workflows optimiert.

  • bull:

    Bull ist für Anwendungen mit hohem Durchsatz optimiert und bietet eine hervorragende Leistung bei der Verarbeitung von Jobs. Die Verwendung von Redis ermöglicht eine schnelle Speicherung und Abruf von Job-Informationen, was die Effizienz der Jobverarbeitung erheblich steigert.

  • agenda:

    Agenda bietet eine gute Leistung für Anwendungen mit moderaten Anforderungen an die Jobverarbeitung. Die Leistung kann jedoch durch die Abhängigkeit von MongoDB beeinträchtigt werden, insbesondere bei einer hohen Anzahl von Jobs oder komplexen Abfragen.

Benutzerfreundlichkeit

  • node-schedule:

    Node-schedule hat eine sehr einfache und leicht verständliche API, die es Entwicklern ermöglicht, schnell zeitgesteuerte Aufgaben zu planen. Die Verwendung von Cron-Syntax macht es für Entwickler, die mit Cron vertraut sind, besonders einfach.

  • bull:

    Bull hat eine intuitive API, die es Entwicklern ermöglicht, schnell mit der Jobverarbeitung zu beginnen. Die umfangreiche Dokumentation und die Vielzahl von Beispielen tragen dazu bei, die Lernkurve zu minimieren.

  • agenda:

    Agenda bietet eine benutzerfreundliche API, die es Entwicklern erleichtert, Jobs zu planen und zu verwalten. Die Dokumentation ist klar und verständlich, was den Einstieg in die Verwendung der Bibliothek erleichtert.

Erweiterbarkeit

  • node-schedule:

    Node-schedule ist weniger erweiterbar im Vergleich zu Agenda und Bull, da es sich hauptsächlich auf die Planung von Jobs konzentriert. Es bietet jedoch grundlegende Funktionen zur Anpassung von Zeitplänen, die für einfache Anwendungen ausreichend sind.

  • bull:

    Bull bietet erweiterte Funktionen wie Job-Prioritäten, Wiederholungen und verzögerte Jobs, die es Entwicklern ermöglichen, komplexe Job-Workflows zu erstellen. Die API ist so gestaltet, dass sie leicht erweiterbar ist, um zusätzliche Funktionen hinzuzufügen.

  • agenda:

    Agenda ist hochgradig erweiterbar und ermöglicht Entwicklern, benutzerdefinierte Job-Handler und Middleware zu erstellen. Dies macht es einfach, die Funktionalität der Bibliothek an spezifische Anforderungen anzupassen.

Einsatzszenarien

  • node-schedule:

    Node-schedule ist perfekt für einfache zeitgesteuerte Aufgaben, wie das Planen von täglichen Berichten oder das Ausführen von Skripten zu bestimmten Zeiten, ohne die Notwendigkeit einer komplexen Infrastruktur.

  • bull:

    Bull ist ideal für Anwendungen, die eine hohe Leistung und Zuverlässigkeit bei der Verarbeitung von Jobs benötigen, wie z.B. das Verarbeiten von Hintergrundaufgaben in Echtzeit oder das Verwalten von Warteschlangen für API-Anfragen.

  • agenda:

    Agenda eignet sich hervorragend für Anwendungen, die eine flexible und anpassbare Jobplanung erfordern, wie z.B. das Versenden von E-Mails oder das Ausführen von Wartungsaufgaben in einer MongoDB-Umgebung.

Cómo elegir: node-schedule vs bull vs agenda

  • node-schedule:

    Wählen Sie node-schedule, wenn Sie eine einfache und leichtgewichtige Lösung für die Planung von Jobs basierend auf Cron-ähnlicher Syntax benötigen. Diese Bibliothek ist ideal für Anwendungen, die einfache zeitgesteuerte Aufgaben ohne die Komplexität einer Datenbank oder einer Warteschlange benötigen.

  • bull:

    Wählen Sie Bull, wenn Sie eine leistungsstarke und robuste Lösung für die Verarbeitung von Jobs in einer Redis-Umgebung benötigen. Bull bietet eine hohe Leistung, eine einfache API und erweiterte Funktionen wie Job-Warteschlangen und Prioritäten, was es ideal für Anwendungen mit hohem Durchsatz macht.

  • agenda:

    Wählen Sie Agenda, wenn Sie eine MongoDB-basierte Lösung benötigen, die eine einfache API für die Planung von Jobs bietet und gut in Node.js-Anwendungen integriert werden kann. Agenda eignet sich besonders gut für Anwendungen, die eine flexible und anpassbare Jobplanung erfordern.

README para node-schedule

Node Schedule

NPM version Downloads Build Status Coverage Status Join the chat at https://gitter.im/node-schedule/node-schedule

NPM

Node Schedule is a flexible cron-like and not-cron-like job scheduler for Node.js. It allows you to schedule jobs (arbitrary functions) for execution at specific dates, with optional recurrence rules. It only uses a single timer at any given time (rather than reevaluating upcoming jobs every second/minute).

Node 6+ is supported.

Overview

Node Schedule is for time-based scheduling, not interval-based scheduling.

While you can easily bend it to your will, if you only want to do something like "run this function every 5 minutes", toad-scheduler would be a better choice. But if you want to, say, "run this function at the :20 and :50 of every hour on the third Tuesday of every month," you'll find that Node Schedule suits your needs better. Additionally, Node Schedule has Windows support, unlike true cron, since the node runtime is now fully supported.

Note that Node Schedule is designed for in-process scheduling, i.e. scheduled jobs will only fire as long as your script is running, and the schedule will disappear when execution completes. If you need to schedule jobs that will persist even when your script isn't running, consider using actual cron.

In case you need durable jobs that persist across restarts and lock system compatible with multi-node deployments, try agenda or bree.

Usage

Installation

You can install using npm.

npm install node-schedule

Jobs and Scheduling

Every scheduled job in Node Schedule is represented by a Job object. You can create jobs manually, then execute the schedule() method to apply a schedule, or use the convenience function scheduleJob() as demonstrated below.

Job objects are EventEmitters, and emit the following events:

  • A run event after each execution.
  • A scheduled event each time they're scheduled to run.
  • A canceled event when an invocation is canceled before it's executed.
    Note that canceled is the single-L American spelling.
  • An error event when a job invocation triggered by a schedule throws or returns a rejected Promise.
  • A success event when a job invocation triggered by a schedule returns successfully or returns a resolved Promise. In any case, the success event receives the value returned by the callback or in case of a promise, the resolved value.

(Both the scheduled and canceled events receive a JavaScript date object as a parameter).
Note that jobs are scheduled the first time immediately, so if you create a job using the scheduleJob() convenience method, you'll miss the first scheduled event, but you can query the invocation manually (see below).

Cron-style Scheduling

The cron format consists of:

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

Examples with the cron format:

const schedule = require('node-schedule');

const job = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

Execute a cron job when the minute is 42 (e.g. 19:42, 20:42, etc.).

And:

const job = schedule.scheduleJob('0 17 ? * 0,4-6', function(){
  console.log('Today is recognized by Rebecca Black!');
});

Execute a cron job every 5 Minutes = */5 * * * *

You can also get when it is scheduled to run for every invocation of the job:

const job = schedule.scheduleJob('0 1 * * *', function(fireDate){
  console.log('This job was supposed to run at ' + fireDate + ', but actually ran at ' + new Date());
});

This is useful when you need to check if there is a delay of the job invocation when the system is busy, or save a record of all invocations of a job for audit purpose.

Unsupported Cron Features

Currently, W (nearest weekday) and L (last day of month/week) are not supported. Most other features supported by popular cron implementations should work just fine, including # (nth weekday of the month).

cron-parser is used to parse crontab instructions.

Date-based Scheduling

Say you very specifically want a function to execute at 5:30am on December 21, 2012. Remember - in JavaScript - 0 - January, 11 - December.

const schedule = require('node-schedule');
const date = new Date(2012, 11, 21, 5, 30, 0);

const job = schedule.scheduleJob(date, function(){
  console.log('The world is going to end today.');
});

To use current data in the future you can use binding:

const schedule = require('node-schedule');
const date = new Date(2012, 11, 21, 5, 30, 0);
const x = 'Tada!';
const job = schedule.scheduleJob(date, function(y){
  console.log(y);
}.bind(null,x));
x = 'Changing Data';

This will log 'Tada!' when the scheduled Job runs, rather than 'Changing Data', which x changes to immediately after scheduling.

Recurrence Rule Scheduling

You can build recurrence rules to specify when a job should recur. For instance, consider this rule, which executes the function every hour at 42 minutes after the hour:

const schedule = require('node-schedule');

const rule = new schedule.RecurrenceRule();
rule.minute = 42;

const job = schedule.scheduleJob(rule, function(){
  console.log('The answer to life, the universe, and everything!');
});

You can also use arrays to specify a list of acceptable values, and the Range object to specify a range of start and end values, with an optional step parameter. For instance, this will print a message on Thursday, Friday, Saturday, and Sunday at 5pm:

const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(4, 6)];
rule.hour = 17;
rule.minute = 0;

const job = schedule.scheduleJob(rule, function(){
  console.log('Today is recognized by Rebecca Black!');
});

Timezones are also supported. Here is an example of executing at the start of every day in the UTC timezone.

const rule = new schedule.RecurrenceRule();
rule.hour = 0;
rule.minute = 0;
rule.tz = 'Etc/UTC';

const job = schedule.scheduleJob(rule, function(){
  console.log('A new day has begun in the UTC timezone!');
});

A list of acceptable tz (timezone) values can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

RecurrenceRule properties

  • second (0-59)
  • minute (0-59)
  • hour (0-23)
  • date (1-31)
  • month (0-11)
  • year
  • dayOfWeek (0-6) Starting with Sunday
  • tz

Note: It's worth noting that the default value of a component of a recurrence rule is null (except for second, which is 0 for familiarity with cron). If we did not explicitly set minute to 0 above, the message would have instead been logged at 5:00pm, 5:01pm, 5:02pm, ..., 5:59pm. Probably not what you want.

Object Literal Syntax

To make things a little easier, an object literal syntax is also supported, like in this example which will log a message every Sunday at 2:30pm:

const job = schedule.scheduleJob({hour: 14, minute: 30, dayOfWeek: 0}, function(){
  console.log('Time for tea!');
});

Set StartTime and EndTime

It will run after 5 seconds and stop after 10 seconds in this example. The ruledat supports the above.

const startTime = new Date(Date.now() + 5000);
const endTime = new Date(startTime.getTime() + 5000);
const job = schedule.scheduleJob({ start: startTime, end: endTime, rule: '*/1 * * * * *' }, function(){
  console.log('Time for tea!');
});

Graceful Shutdown.

You can shutdown jobs gracefully.
gracefulShutdown() will cancel all jobs and return Promise.
It will wait until all jobs are terminated.

schedule.gracefulShutdown();

You can also gracefully shutdown jobs when a system interrupt occurs.

process.on('SIGINT', function () { 
  schedule.gracefulShutdown()
  .then(() => process.exit(0))
}

Handle Jobs and Job Invocations

There are some function to get information for a Job and to handle the Job and Invocations.

job.cancel(reschedule)

You can invalidate any job with the cancel() method:

j.cancel();

All planned invocations will be canceled. When you set the parameter reschedule to true then the Job is newly scheduled afterwards.

job.cancelNext(reschedule)

This method invalidates the next planned invocation or the job. When you set the parameter reschedule to true then the Job is newly scheduled afterwards.

job.reschedule(spec)

This method cancels all pending invocation and registers the Job completely new again using the given specification. Return true/false on success/failure.

job.nextInvocation()

This method returns a Date object for the planned next Invocation for this Job. If no invocation is planned the method returns null.

Contributing

This module was originally developed by Matt Patenaude who eventually passed over maintainer's mantle over to Tejas Manohar.

Currently it is being maintained by Igor Savin and our amazing community.

We'd love to get your contributions. Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit.

Before jumping in, check out our Contributing page guide!

Copyright and license

Copyright 2015 Matt Patenaude.

Licensed under the MIT License.