Saltar al contenido

Cómo hacer un trabajo cron con PM2

Te damos el arreglo a este disgusto, al menos eso creemos. Si continuas con interrogantes puedes dejarlo en el apartado de comentarios, que sin dudas

Solución:

Utilizar el --cron opción:

-c –cron

Por ejemplo:

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

Pm2 ahora reiniciará el sendMail.js guión en la hora, ya los 15, 30 y 45 minutos pasada la hora

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 completado 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 inmediatamente después de completarlo

También asegúrese de que su instances es 1, de lo contrario se ejecutarán varios procesos cron.

Advertencias clave:

Cada vez que reinicie pm2 all, el trabajo cron se ejecutará independientemente de la expresión cron. Si es crítico ejecutar solo en momentos específicos, agregue esta verificació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);

Si usa el ecosistema PM2, en el archivo de configuración agregue la secuencia cron a script param 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
  ]

Sección de Reseñas y Valoraciones

Nos puedes añadir valor a nuestra información añadiendo tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *