start guide delete node.js pm2

node.js - guide - Cómo hacer un trabajo cron con PM2



pm2 kill (5)

Esto es lo que funcionó para mí, dividí el cron en un archivo diferente que se ejecuta en un proceso diferente porque quiero liberar recursos después de que el cron haya finalizado la ejecución.

ecosistema.config.js:

module.exports = { /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ */ apps: [ // Main API Hosting { name: ''API'', script: ''bin/www'', env: { COMMON_VARIABLE: ''true'' }, instances: 1, exec_mode: ''cluster'', watch: false, autorestart: true }, { name: ''CRON'', script: "crons/cronjob.js", instances: 1, exec_mode: ''fork'', cron_restart: "0,30 * * * *", watch: false, autorestart: false } ] };

Las siguientes líneas son importantes en el ejecutable cron.

cron_restart: "0,30 * * * *" <- expresión cron

autorestart: false <- importante porque, de lo contrario, pm2 reiniciará el cron una vez finalizado inmediatamente

También asegúrese de que sus instances sean 1 de lo contrario, se ejecutarán múltiples procesos cron.

Advertencias clave:

Cada vez que reinicia todo pm2, el trabajo cron se ejecutará independientemente de la expresión cron. Si es crítico ejecutarlo solo en momentos específicos, agregue esta comprobación adicional al comienzo del archivo cron

if (new Date().getHours() !== 0 ) { console.log(`Current hours is ${new Date().getHours()}, not running.`) process.exit(0); }

Quiero hacer un trabajo cron para enviar correo cada 15 minutos tomando datos de una tabla de base de datos. En el nodo js puedo hacer un trabajo cron, pero a través de PM2 no entiendo dónde colocar el código y cómo funciona.


Gracias por su respuesta; Lo hago de esta manera y solo configuro el correo electrónico.

  1. npm instalar node-crontab

2. var crontab = require (''node-crontab'');

var jobId = crontab.scheduleJob ("* / 15 * * * *", function () {

//This will call this function every 15 minutes console.log("It''s been 15 minutes!");

});


Si utiliza el ecosistema PM2, a continuación, en el archivo de configuración, agregue la secuencia cron al parámetro de script envolviéndolo con comillas simples. De alguna manera, las comillas dobles no funcionaron para mí.

module.exports = { apps : [{ name : "Send-mail", script : "./sendMail.js --cron ''*/15 * * * *''", watch : true }] }

alternativamente (mi preferencia)

module.exports = { apps : [{ name : "Send-mail", script : "./sendMail.js", cron_restart: "*/15 * * * *", watch : true }] }


También puede usar el módulo de programación de nodos que le permite definir reglas de estilo cron. Luego, puede ejecutar el programa normalmente en pm2, lo uso con PM2 para muchos proyectos y nunca me ha fallado.

var schedule = require(''node-schedule''); var rule = new schedule.RecurrenceRule(); rule.hour = [10]; // 10am rule.minute = [0]; // 0mins var job = schedule.scheduleJob(rule, function(){ console.log("10am every day") }); //Rule 2 - 6am every wednesday var rule2 = new schedule.RecurrenceRule(); rule2.dayOfWeek = 3; // 0 = Sunday rule2.hour = 6; rule2.minute = 0; var job2 = schedule.scheduleJob(rule2, function(){ console.log("Every Wednesday @ 6am"); }); var rule3 = new schedule.RecurrenceRule(); rule3.minute = [0, 15, 30, 45]; // Specific Minutes var job3 = schedule.scheduleJob(rule3, function(){ console.log("Run at specific minutes") });

También es compatible con las reglas de estilo CRON, pero prefiero el método anterior.

Consulte la documentación en https://www.npmjs.com/package/node-schedule


Usa la opción --cron :

-c --cron <cron_pattern>

Por ejemplo:

pm2 start sendMail.js --cron "*/15 * * * *"

Pm2 ahora reiniciará el script sendMail.js a la hora, y a los 15, 30 y 45 minutos después de la hora