Necesito un programador de Nodejs que permita realizar tareas a diferentes intervalos [cerrado]


Estoy buscando un programa de trabajo de nodo que me permita programar una serie de tareas a diferentes intervalos. Por ejemplo,

  • función de llamada A cada 30 segundos
  • llamar a la función B cada 60 segundos
  • llamar a la función C cada 7 días

También quiero poder iniciar y detener el proceso.

Hasta ahora, he mirado:

  • Más tarde - la sintaxis me confunde, también aparentemente no puede programar tareas más allá de un mes

  • Agenda - parece el más prometedor, sin embargo estoy confundido acerca de la funcionalidad de la base de datos

  • Timeplan - demasiado simple, no se puede iniciar y detener

Encuentro confusa la sintaxis de este último.

Author: Brian Burns, 2013-12-10

6 answers

Yo recomendaría node-cron. Permite ejecutar tareas utilizando patrones Cron, por ejemplo

'* * * * * *' - runs every second
'*/5 * * * * *' - runs every 5 seconds
'10,20,30 * * * * *' - run at 10th, 20th and 30th second of every minute
'0 * * * * *' - runs every minute
'0 0 * * * *' - runs every hour (at 0 minutes and 0 seconds)

Pero también máscomplejos horarios, por ejemplo

'00 30 11 * * 1-5' - Runs every weekday (Monday through Friday) at 11:30:00 AM. It does not run on Saturday or Sunday.

Código de ejemplo: trabajo en ejecución cada 10 minutos:

var cron = require('cron');
var cronJob = cron.job("0 */10 * * * *", function(){
    // perform operation e.g. GET request http.get() etc.
    console.info('cron job completed');
}); 
cronJob.start();

Puedes encontrar más ejemplos en node-cron wiki

Se puede encontrar más información sobre la configuración de cron en cron wiki

He estado usando esa biblioteca en muchos proyectos y hace el trabajo. Espero que eso ayude.

 184
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-11 09:27:33

He usado node-cron y agenda.

Node-cron es una biblioteca muy simple, que proporciona una api muy básica y fácil de entender como crontab. No necesita ninguna configuración y solo funciona.

var cronJob = require('cron').CronJob;
var myJob = new cronJob('00 30 11 * * 1-5', function(){...});
myJob.start();

Agenda es muy potente y apto para servicios mucho más complejos. Piensa en ifttt , tienes que ejecutar millones de tareas. agenda sería la mejor opción.

Nota: Necesita Mongodb para usar Programa

var Agenda = require("Agenda");
var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}});
agenda.every('*/3 * * * *', 'delete old users');
agenda.start();
 30
Author: Ryan Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-01 17:20:30

He escrito un módulo de nodo que proporciona una envoltura alrededor de setInterval usando duraciones de momento proporcionando una interfaz declarativa:

Npm instalar cada momento

var every = require('every-moment');

var timer = every(5, 'seconds', function() {
    console.log(this.duration);
});

every(2, 'weeks', function() {
    console.log(this.duration);
    timer.stop();
    this.set(1, 'week');
    this.start();
});

Https://www.npmjs.com/package/every-moment

Https://github.com/raygerrard/every-moment

 10
Author: raygerrard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-12 14:16:04

Creo que el mejor ranking es

1.node-schedule

2.más tarde

3.crontab

Y la muestra de node-schedule está a continuación:

var schedule = require("node-schedule");
var rule = new schedule.RecurrenceRule();
//rule.minute = 40;
rule.second = 10;
var jj = schedule.scheduleJob(rule, function(){
    console.log("execute jj");
});

Tal vez pueda encontrar la respuesta de node modules.

 8
Author: Richard Xue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-16 05:38:32

NodeJS default

Https://nodejs.org/api/timers.html

setInterval(function() {
    // your function
}, 5000);
 7
Author: Rodrigo Adachi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-15 10:38:34

He escrito un pequeño módulo para hacer precisamente eso. Usted puede encontrar here:
https://github.com/paragi/timexe.git
https://www.npmjs.com/package/timexe

Algunas de las características:

  • Su código simple, pequeño y confiable y no tiene dependencias
  • La resolución es en milisegundos y tiene una alta precisión en el tiempo
  • Cron como, pero no compatible (orden invertido y otras mejoras)
  • Trabajo en el navegador también

Instalar:

npm install timexe

Uso:

var timexe = require('timexe');
//Every 30 sec
var res1=timexe(”* * * * * /30”, function() console.log(“Its time again”)});

//Every minute
var res2=timexe(”* * * * *”,function() console.log(“a minute has passed”)});

//Every 7 days
var res3=timexe(”* y/7”,function() console.log(“its the 7th day”)});

//Every Wednesdays 
var res3=timexe(”* * w3”,function() console.log(“its Wednesdays”)});

// Stop "every 30 sec. timer"
timexe.remove(res1.id);

Puede lograr la funcionalidad start/stop eliminando/re-agregando la entrada directamente en la matriz de trabajos de timexe. Pero no es una función expresa.

 0
Author: Simon Rigét,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-05 19:32:06