如何使用PM2进行cron作业

时间:2017-02-28 05:55:13

标签: node.js pm2

我想做一个cron作业,每隔15分钟从数据库表中获取数据。在节点js中我可以创建一个cron作业但是通过PM2我不知道在哪里放置代码以及它是如何工作的。

6 个答案:

答案 0 :(得分:75)

使用--cron选项:

  

-c --cron <cron_pattern>

例如:

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

Pm2现在将在一小时内重新启动sendMail.js脚本,并在一小时后的15,30和45分钟重新启动

答案 1 :(得分:4)

这对我有用, 我将cron拆分为一个在不同进程中运行的文件,因为我想在cron完成执行后释放资源。

  

ecosystem.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
    }
  ]
};

以下行在cron可执行文件中很重要

cron_restart: "0,30 * * * *" <-cron表达式

autorestart: false <-重要,因为否则pm2将在完成后立即重新启动cron

还要确保您的instances为1,否则将运行多个cron进程。

  

主要警告:

每当您执行pm2重新启动所有命令时,cron作业将运行,而与cron表达式无关。如果仅在特定时间运行非常关键,请在cron文件的开头添加此附加检查

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

答案 2 :(得分:3)

如果您使用PM2 ecosystem,则在配置文件中,通过用单引号将cron序列添加到module.exports = { apps : [{ name : "Send-mail", script : "./sendMail.js --cron '*/15 * * * *'", watch : true }] } 参数中。不知何故,双引号对我不起作用。

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

(我的偏爱)

{{1}}

答案 3 :(得分:2)

您还可以使用节点计划模块,该模块允许您定义cron样式规则。然后,您可以在pm2中正常运行该程序,我将它与PM2一起用于许多项目,而且它从未让我失望。

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")
});         

它也支持CRON样式规则,但是我更喜欢上面的方法。

https://www.npmjs.com/package/node-schedule上查看文档

答案 4 :(得分:0)

通过pm2实现cron的三种方法

  1. pm2命令行
  2. pm2 ecosyste.config文件
  3. pm2-api

refer this这对我有所帮助。

答案 5 :(得分:-1)

谢谢你的回答;我这样做,只是设置电子邮件

  1. npm install node-crontab
  2. 2。 var crontab = require(&#39; node-crontab&#39;);

    var jobId = crontab.scheduleJob(&#34; * / 15 * * * *&#34;,function(){

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

    });