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.
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.
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
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();
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();
});
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.
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);
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.
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