2011-11-04 97 views
17

Soy nuevo en node.js. Necesito node.js para consultar un mongodb cada cinco minutos, obtener datos específicos y luego usar socket.io, permitir que los clientes web suscritos accedan a estos datos. Ya tengo configurada la parte socket.io y, por supuesto, mongo, solo necesito saber cómo hacer que node.js se ejecute cada cinco minutos y luego publicarlo en socket.io.Programar trabajo Node.js cada cinco minutos

¿Cuál es la mejor solución para esto?

Gracias

+1

¿por qué estás utilizando el retraso de tiempo. socket.io se usa para transmitir datos en tiempo real. –

Respuesta

58
var minutes = 5, the_interval = minutes * 60 * 1000; 
setInterval(function() { 
    console.log("I am doing my 5 minutes check"); 
    // do your stuff here 
}, the_interval); 

Guardar ese código como node_regular_job.js y ejecutarlo :)

+0

¿Qué sucede si el código que deseo ejecutar cada 5 minutos tarda más de 5 minutos en ejecutarse? ¿Se disparará más de una vez? – otmezger

+1

con 'setInterval()' yes (si es asíncrono, de lo contrario bloqueará todo), con 'setTimeout()' y recursivamente llamando a la función nuevamente al final (cuando termine) no. – alessioalex

+0

funciona perfectamente! Gracias. – otmezger

1

Así es como se debe hacer si usted tenía algunas tareas asíncronas para gestionar:

(function schedule() { 
    background.asyncStuff().then(function() { 
     console.log('Process finished, waiting 5 minutes'); 
     setTimeout(function() { 
      console.log('Going to restart'); 
      schedule(); 
     }, 1000 * 60 * 5); 
    }).catch(err => console.error('error in scheduler', err)); 
})(); 

Sin embargo, no puede garantizar cuándo se iniciará, pero al menos no ejecutará varias veces el trabajo al mismo tiempo, si su trabajo tarda más de 5 minutos en ejecutarse.

Puede seguir usando setInterval para programar un trabajo asincrónico, pero si lo hace, al menos debería marcar las tareas procesadas como "procesadas", de modo que si el trabajo va a programarse una segunda vez antes del acabados anteriores, su lógica puede decidir no procesar las tareas que aún se procesan.

1

@alessioalex has the right answer cuando controla un trabajo desde el código, pero otros pueden tropezar aquí buscando una solución CLI. No se puede vencer sloth-cli.

Simplemente ejecute, por ejemplo, sloth 5 "npm start" para ejecutar npm start cada 5 minutos.

This project tiene un ejemplo package.json uso.

Cuestiones relacionadas