run periodically nodejs node job example crontime node.js cron

node.js - periodically - npm node-cron



Ejecutar Cron Job cada 45 minutos con Node-Cron (8)

Estoy usando node-cron para ejecutar trabajos programados. Quiero que los trabajos se ejecuten cada 45 minutos, pero su actuación es extraña.

Aquí está el patrón que estoy usando

''00 */45 * * * *''

Comencé mi guión el Tue Jun 17 2014 08:17:39 GMT+0000 (GMT)

Aquí están las primeras veces que se ejecutó el trabajo.

1. Tue Jun 17 2014 08:45:03 GMT+0000 (GMT)

2. Tue Jun 17 2014 09:00:01 GMT+0000 (GMT)

3. Tue Jun 17 2014 09:45:02 GMT+0000 (GMT)

Esto definitivamente no es lo que esperaba o quería. Todo lo que quiero es ejecutar los trabajos cada 45 minutos. ¿Alguien puede ayudarme con el patrón? Gracias :)


Debe escribir un script como contenedor para decidir si el comando real se ejecutará cada 45 minutos. Eso es 0, 45, 30 (= 45 + 45 - 60), 15 (= 30 + 45 - 60), 0 (= 15 + 45 - 60). Por lo tanto, los minutos para ejecutar el script serán 0,15,30,45 .

La date +%M comando date +%M puede ser útil en el script de shell.


Estoy más familiarizado con cron que con node-cron , pero he echado un vistazo rápido a la documentación.

Si lo comprendo correctamente, node-cron usa una sintaxis similar a la utilizada por cron, pero con un campo adicional de "segundos". Entonces, donde un trabajo cron podría tener:

# min hour mday month wday command */15 * * * * some-command

para programar some-command para que se ejecute cada 15 minutos, node-cron usaría una sintaxis similar para especificar el tiempo de ejecución:

''0 */15 * * * *''

(con un campo adicional para especificar segundos), pero ejecuta una función de JavaScript especificada, no un comando externo.

En el cron estándar, no hay sintaxis para especificar la ejecución de un trabajo cada 45 minutos. Una especificación de 0/45 * * * * ejecutaría un trabajo dos veces por hora, a los 0 y 45 minutos después de la hora. Para ejecutar un trabajo cada 45 minutos (a las 00:00, 00:45, 01:30, 02:15, ..., es decir, 32 veces al día), debe programarlo para que se ejecute cada 15 minutos, y luego invoca un script que verifique la hora actual para decidir si hacer algo.

O puede escribir una lista exhaustiva de todas las veces que desea que se ejecute el trabajo:

0 0 * * * some-command 45 0 * * * some_command 30 1 * * * some_command 15 2 * * * some_command # 28 lines omitted

Definitivamente me gustaría escribir un script para generar esta lista.

(Esto es factible porque las 24 horas son un múltiplo de 45 minutos. No se puede ejecutar algo cada 35 minutos de esta manera).

Un enfoque similar debería funcionar para el nodo-cron. Programe la función para que se ejecute cada 15 minutos e invoque una función que verifique la hora actual para decidir si se debe ejecutar. Por ejemplo, puede verificar si el número de minutos desde la medianoche módulo 45 es cero. (Es posible que desee permitir una pequeña variación en caso de que la programación no sea exacta).

No sé JavaScript lo suficientemente bien como para sugerir la mejor manera de escribir esta función, pero debería ser razonablemente sencillo.

O escribe 28 líneas para especificar todas las veces que quieres que se ejecute.


He intentado con esto durante 45 segundos de intervalo y trabajando bien

''* / 45 * * * * *''


No hay una forma directa de hacer esto. Sin embargo, podemos obtener el resultado al interceptar la programación mediante un comando de shell dentro del script de destino.

Primero, ejecute el script cada 15 minutos:

*/15 * * * * <target_script>

Luego, dentro del target_script , coloque el siguiente código antes de los códigos reales:

#!/bin/sh # Exit except at 0:45, 1:30, 2:15, 3:00, 3:45 etc if ! echo "((`date +%-H`*60)+`date +%-M`)/45" | bc -l | grep "/.0*$" &> /dev/null; then exit 1; fi # Your actual code goes here;


Probablemente estas buscando

0 */45 * * * *

Los rangos están here .

  • Segundos: 0-59
  • Minutos: 0-59
  • Horas: 0-23
  • Día del mes: 1-31
  • Meses: 0-11
  • Día de la semana: 0-6


puede usar node-reel que es más legible, directo e impresionante 😉.

const reel = require(''node-reel'') reel().call(() => { console.log(Date.now()); }).everyFortyFiveMinutes().run()

https://github.com/shakee93/node-reel


utilizar cron npm moduel algo como esto

var cronJob = require(''cron'').CronJob; var job = new cronJob({ cronTime:''0 */45 * * * *'', onTick: function(){ var my_date = new Date(); var tomorrow_date = my_date.getFullYear() + "-" + (''0''+(my_date.getMonth()+1)) + "-" + (my_date.getDate()+1) var condition = [{},{$set: {''plannedDeliveryDate'' :tomorrow_date +''T00:00:00.000Z''}}] dbQuery.updateMany(orderModel, condition, function(err, result){ if(result.nModified == result.n) console.log(err, result) }) }, start:true, timeZone:''Asia/Kolkata'' }); job.start();