¿Hay una biblioteca de planificador de trabajos para node.js? [cerrado]

155

¿Hay algún cron como la biblioteca que me permita programar alguna función para que se ejecute en un momento determinado (15:30 por ejemplo, no x horas a partir de ahora, etc.)? Si no hay este tipo de biblioteca, ¿cómo debería implementarse? ¿Debo configurar la devolución de llamada para que se llame cada segundo y verificar la hora y comenzar los trabajos programados para esa hora o qué?

JtR
fuente
44
node-cron parece ser una muy buena opción
JtR
var horario = require ('nodo-horario'); Es lo mejor. ¡¡¡salud!!!
Saumyajit

Respuestas:

122

node-cron hace justo lo que describí

JtR
fuente
44
¿Escribes las declaraciones de cronjob en app.js / scripts.js?
ArVan
¿ node-cron le permite editar trabajos cron del sistema desde node.js? ¿Depende del proceso del nodo en ejecución? ¿O le permitirá ejecutar programas incluso después de que finalice su proceso principal?
Ajar
55
@Ajar no, después de la finalización del proceso de nodejs, se perderán todos los trabajos. No se ha enviado una tabla cron con node-cron
Votación a favor
1
Supongo que sí @ChrisC. Si no estoy usando ningún marco, declaro crons en app.js. En sails.jslo hago enbootstrap
ArVan
2
@arVan si estás interesado, en realidad comencé a trabajar agendapara agregar soporte de línea de flotación aquí: github.com/mikermcneil/agenda (literalmente recién empezado, debería tener un progreso útil la próxima semana)
mikermcneil
44

node-schedule Un planificador de trabajos de tipo cron y no cron para Node.

Unitech
fuente
2
Esto logra evitar la sintaxis crontab a veces confusa, y es un poco más legible en mi opinión.
Simon East
como agenda parece proporcionar persistencia 0.1.13
drdrej
55
node-schedule no proporciona persistencia. Según los documentos: 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.
Mike Hedman
34

agenda es una programación de trabajos ligeros para el nodo. Esto te ayudara.

Fizer Khan
fuente
1
la agenda se basa en node-cron con una capa persistente (mongo). entonces la respuesta anterior es mejor.
drdrej
51
Para aclarar, como autor de la agenda, en realidad no se basa en absoluto en el nodo-cron ...
Ryan
1
La biblioteca de agenda es la mejor biblioteca, ya que la configuración es simple y el uso es fácil para el usuario. Felicitaciones @ Ryan
Vimalraj Selvam
44
Descubrí que agendatengo un comportamiento inconsistente y no recomendaría usarlo. Verifique los problemas abiertos y las relaciones públicas para hacer su propia llamada.
Russbear
2
Tenga en cuenta que la agenda no está lista para la producción. Tiene problemas de pérdida de memoria y verifica si hay problemas. Todavía tiene muchos errores. Parece prometedor cuando está listo.
Sebastian
15

later.js es una muy buena biblioteca "planificador" de JavaScript. Puede ejecutarse en Node.js o en un navegador web.

XåpplI'-I0llwlg'I -
fuente
3
Intenté algunas de las sugerencias en este hilo, pero este módulo me pareció el más fácil de usar y directo para trabajar. ¡Gracias!
Gene Bo
12

Estoy usando kue: https://github.com/learnboost/kue . Es muy lindo

Las características oficiales y mis comentarios:

  1. trabajos retrasados
    • Si desea dejar que el trabajo se ejecute en un momento específico, calcule los milisegundos entre ese momento y ahora. Llame a job.delay (milisegundos) (el documento dice minutos, lo cual está mal). No olvide agregar "jobs.promote ();" cuando inicias trabajos.
  2. evento de trabajo y progreso pubsub.
    • No lo entiendo
  3. IU integrada rica.
    • Muy útil. Puede verificar el estado del trabajo (hecho, en ejecución, retrasado) en la interfaz de usuario integrada y no necesita escribir ningún código. Y puede eliminar registros antiguos en la interfaz de usuario.
  4. desplazamiento infinito
    • A veces no funciona. Hay que refrescarse.
  5. Indicación de progreso de la IU
    • Bueno para los trabajos que consumen mucho tiempo.
  6. registro de trabajo específico
    • Debido a que son trabajos retrasados, debe registrar información útil en el trabajo y verificar más adelante a través de la interfaz de usuario.
  7. impulsado por Redis
    • Muy útil. Cuando reinicia su aplicación node.js, todos los registros de trabajo siguen ahí y los trabajos programados también se ejecutarán.
  8. reintentos opcionales
    • Agradable.
  9. capacidades de búsqueda de texto completo
    • Bueno.
  10. RESTful JSON API
    • Suena bien, pero nunca lo uso.

Editar:

  1. kue no es un cron como la biblioteca.
  2. Por defecto, kue no admite trabajos que se ejecutan repetidamente (por ejemplo, todos los domingos).
Vince Yuan
fuente
66
Kue es una cola de trabajos, no un planificador.
Leonid Beschastny
1
@LeonidBeschastny Kue es una cola de trabajos. Y también es un programador, porque puede "permitirme programar alguna función para que se ejecute en un momento determinado".
Vince Yuan
Pensé que los trabajos de Kue solo pueden retrasarse, pero no programarse hasta cierto tiempo.
Leonid Beschastny
@LeonidBeschastny Tienes razón. Kue no proporciona API para programar un trabajo a una hora determinada. Pero, como mencioné, "si desea dejar que el trabajo se ejecute en un momento específico, calcule los milisegundos entre ese momento y ahora. Llame al retraso de trabajo (milisegundos) (El documento dice minutos, lo cual está mal)". Es muy fácil .
Vince Yuan
1
Podrías probar kue-Scheduler, que es similar a
Aganda
9

node-crontab le permite editar trabajos cron del sistema desde node.js. El uso de esta biblioteca le permitirá ejecutar programas incluso después de que finalice su proceso principal. Descargo de responsabilidad: soy el desarrollador.

Blago
fuente
¿Entonces persiste si el servidor de nodo se reinicia?
jonperl
Lo encontré stackoverflow.com/a/5636298/230462
jonperl
Sí, los trabajos son persistentes.
Blago
tiene licencia GPL, por lo que no se puede usar en un proyecto comercial.
drdrej
55
La licencia ahora es MIT
Blago
8

Puedes usar timexe

Es fácil de usar, ligero, no tiene dependencias, tiene una sintaxis mejorada sobre cron, con una resolución en milisegundos y funciona en el navegador.

Instalar en pc:

npm install timexe

Utilizar:

var timexe = require('timexe');
var res = timexe("* * * 15 30", function(){ console.log("It's now 3:30 pm"); });

(Soy el autor)

Simon Rigét
fuente
¿Puedo obtener algún ejemplo para esto por favor?
Alex
1
Eche un vistazo a los ejemplos en github: github.com/paragi/timexe
Simon Rigét
2

Soy el autor de node-runnr . Tiene un enfoque muy simple para crear trabajo. También es muy fácil y claro declarar el tiempo y el intervalo. Por ejemplo, para ejecutar un trabajo cada 10 minutos y 20 segundos,

Runnr.addIntervalJob('10:20', function(){...}, 'myjob')

Para hacer un trabajo a las 10 a.m. y a las 3 p.m. diariamente,

Runnr.addDailyJob(['10:0:0', '15:0:0'], function(){...}, 'myjob')

Es así de simple. Para más detalles: https://github.com/Saquib764/node-runnr

codedemon
fuente
1

Tanto el nodo-horario como el nodo-cron podemos usar para implementar programadores basados ​​en cron.

NOTA : para generar expresiones cron, puede usar este cron_maker

dush88c
fuente
0

Esto no será adecuado para todos, pero si su aplicación ya está configurada para tomar comandos a través de un socket, puede usar netcat para emitir comandos a través de cron propiamente dicho.

echo 'mycommand' | nc -U /tmp/myapp.sock
Adria
fuente